我有一个名为group
的类,它将在其中保留许多基类,保存在std::unique_ptr
s(多态)中。顺序无关紧要,如果它们之间的某些元素相等也不重要。这是std::vector
的任务,理想情况下我会在成员声明中标记为const
。
作为设计的一部分,我想传递适合group
中initializer_list
对象的所有元素,如下所示:
class base;
class derived1 : base;
class derived2 : base;
class derived3 : base;
group my_object({ new derived1() , new derived2() , new derived3() });
但我遇到以下问题:
group
课程内的向量将由std::unique_ptr
,非对象组成。std::initializer_list
只能容纳一种的对象,因此该类型应为指向基类的指针。考虑到所有这些因素,我该如何实施呢?由于group
类'向量中保存的元素不应该更改,因此在构造函数的初始化列表中初始化它会更有效。但是,std::unique_ptr
s不可复制,我无法弄清楚如何从由原始指针组成的vector
构造unique_ptr<base_class>
initializer_list
。
答案 0 :(得分:2)
您可以制作如下的初始化列表:
#include<memory>
class base{};
class derived1 : public base{};
class derived2 : public base{};;
class derived3 : public base{};;
using namespace std;
int main (){
auto ptrs={ unique_ptr<base>(new derived1()) , unique_ptr<base>(new derived2()) , unique_ptr<base>(new derived3()) };
}
但问题似乎是你不能从初始化列表中移动,因为初始化列表是不变的。这里还有更多内容。 initializer_list and move semantics
我在in-place vector construction from initialization list (for class with constructor arguments)
问了一个相关但又不同的问题