在可变数据结构中初始化共享指针向量
Initialize a vector of shared pointers in varidic data structures
我正在玩可变结构,我就像一个拿着火柴盒的孩子。目标是使用参数包扩展来初始化基 class 指针的向量。
给定:
struct base {
base() {};
virtual ~base() {};
...
};
template<class T>
struct derived : public base {
derived() {};
virtual ~derived() {};
...
};
struct collection {
collection()
: a{ make_shared<derived<int>>(),
make_shared<derived<float>>(),
make_shared<derived<double>>() } {};
~collection() {};
vector<shared_ptr<base>> a;
...
};
是否可以使用包扩展来设置向量中的项目?以下不编译,但你明白了。参数列表也很好。
template<class ...t>
struct collection2 {
collection2() : a{ make_shared<derived<t>>... } {}; //????
~collection2() {};
vector<shared_ptr<base>> a;
};
所以你应该可以这样声明它:
int main() {
collection2<int,float,double> a;
return 0;
}
无论如何,感谢您的输入或对替代方案的建议。
你的尝试几乎是正确的。您只是缺少 ()
来调用 make_shared
:
template<class ...t>
struct collection2 {
collection2() : a{ make_shared<derived<t>>()... } {};
~collection2() {};
vector<shared_ptr<base>> a;
};
我正在玩可变结构,我就像一个拿着火柴盒的孩子。目标是使用参数包扩展来初始化基 class 指针的向量。 给定:
struct base {
base() {};
virtual ~base() {};
...
};
template<class T>
struct derived : public base {
derived() {};
virtual ~derived() {};
...
};
struct collection {
collection()
: a{ make_shared<derived<int>>(),
make_shared<derived<float>>(),
make_shared<derived<double>>() } {};
~collection() {};
vector<shared_ptr<base>> a;
...
};
是否可以使用包扩展来设置向量中的项目?以下不编译,但你明白了。参数列表也很好。
template<class ...t>
struct collection2 {
collection2() : a{ make_shared<derived<t>>... } {}; //????
~collection2() {};
vector<shared_ptr<base>> a;
};
所以你应该可以这样声明它:
int main() {
collection2<int,float,double> a;
return 0;
}
无论如何,感谢您的输入或对替代方案的建议。
你的尝试几乎是正确的。您只是缺少 ()
来调用 make_shared
:
template<class ...t>
struct collection2 {
collection2() : a{ make_shared<derived<t>>()... } {};
~collection2() {};
vector<shared_ptr<base>> a;
};