gpt4 book ai didi

c++ - 在可变数据结构中初始化共享指针 vector

转载 作者:行者123 更新时间:2023-11-27 22:37:37 25 4
gpt4 key购买 nike

我正在玩可变结构,我就像一个拿着火柴盒的 child 。目标是使用参数包扩展来初始化基类指针的 vector 。鉴于:

   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;
...
};

是否可以使用包扩展设置 vector 中的项目?以下不编译,但你明白了。参数列表也很好。

    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;
};

关于c++ - 在可变数据结构中初始化共享指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com