【发布时间】:2020-11-16 09:44:30
【问题描述】:
我尝试创建一个模板类,它将模板参数保存为成员变量 (msg_)。
现在类的输入应该允许像int和shared_ptr<int>这样的普通类型。
template <typename T>
class Foo {
public:
Foo<T>() {};
private:
T msg_;
};
我的问题是,如果使用shared_ptr<int> 初始化类,shared_ptr 必须初始化:
this->msg_ = std::make_shared<T*>();
我试着这样解决它:
Foo<T>() {
if (std::is_pointer<T>::value) {
this->msg_ = std::make_shared<T*>();
}
};
,但问题是必须在编译时解决。否则无法编译。
你知道解决这个问题的任何模式吗?
谢谢!和 最好的祝福 费边
【问题讨论】:
-
如果
T是std::shared_ptr<int>,std::make_shared<T*>()将返回std::shared_ptr<std::shared_ptr<int>*>。为什么默认初始化不够? (此外,您尝试的不是初始化,而是赋值。) -
我正在使用一个回调方法
std::function<void(T&)> user_callback,它被this->user_callback(this->msg_)调用。我遇到的问题是 msg shared_ptr 是函数内部的 nullptr,因此我的程序崩溃了。
标签: c++ templates shared-ptr