3

我有一个名为 的类,group它将在其中保留许多基类,保存在std::unique_ptrs (多态性)中。顺序无关紧要,它们之间的某些元素是否相等也无关紧要。这是 a 的任务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_lists 只能保存一种类型的对象,因此该类型应为指向基类的指针。

考虑到所有这些,我应该如何实施它?由于group类向量中的元素不应该更改,因此在构造函数的初始化列表中对其进行初始化会更有效。但是,std::unique_ptrs 是不可复制的,我不知道如何从由原始指针组成的a vectorof构造。unique_ptr<base_class>initializer_list

4

1 回答 1

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 和移动语义

我在初始化列表的就地向量构造中问了一个相关但不同的问题(对于具有构造函数参数的类)

于 2013-06-16T17:06:14.653 回答