我可以在不知道type参数的情况下持有shared_ptr吗?

问题描述

我想持有shared_ptr个模板类。但是,我也不想将B类作为模板类。以我的理解,任何类型的shared_ptr都将具有相同的内存布局。所以我想知道在这种情况下有什么解决方法吗?

template<T>
class A {
...
};

class B {
...
  std::shared_ptr<A<T>> ptr;
}

解决方法

当类型完全无关紧要时,可以使用void

template <typename>
class C {};

std::shared_ptr<void> p = std::make_shared<C<int>>();

添加单态基类可以限制可以存储的类型。

class AnyC {};

template <typename>
class C : public AnyC {};

std::shared_ptr<AnyC> p = std::make_shared<C<int>>();

如果该基类具有虚拟方法,则可以通过指针对其进行调用。

class AnyC {
    virtual void f();
};

template <typename>
class C : public AnyC {
    void f() override;
};

std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
p->f();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...