C++ C++;std::vector的初始值设定项列表<;obj*>;作为构造函数参数

C++ C++;std::vector的初始值设定项列表<;obj*>;作为构造函数参数,c++,stl,initialization,C++,Stl,Initialization,在这种情况下,我需要创建具有许多对象指针参数的类的实例。但是,我正在寻找一种更简单的方法。在这个代码示例中,我非常概括地演示了我要做的事情 #include <vector> #include <string> class A { public: A(std::string param); }; class B { public: B(std::vector<A*> params); }; int main(int argc, char

在这种情况下,我需要创建具有许多对象指针参数的类的实例。但是,我正在寻找一种更简单的方法。在这个代码示例中,我非常概括地演示了我要做的事情

#include <vector>
#include <string>
class A
{
  public:
    A(std::string param);
};
class B
{
  public:
    B(std::vector<A*> params);
};
int main(int argc, char* argv[])
{
  std::vector<A*> my_arguments;
  my_arguments.push_back(new A("A1"));
  my_arguments.push_back(new A("A2"));
  my_arguments.push_back(new A("A3"));
  my_arguments.push_back(new A("A4"));

  B my_b = new B(my_arguments);
}

我怎样才能达到类似的结果?我曾考虑过使用
va_list
,但这需要另一个标记结束的参数,或者变量数量的计数。这可能是我最后要做的,但是,还有其他的策略吗?

你就快到了

B my_b{{new A("A1"), new A("A2"), new A("A3"), new A("A4")}};
注意:您的代码试图创建的
B my_B
不是指针,因此不需要使用
new
。外部的
{
}
对围绕着构造函数的参数,内部的
{
}
对为
std::vector
构造函数创建一个
std::initializer\u列表,因此其中的值用于构造
std::vector
参数


请注意,此语法自C++11以来就得到了支持-一些编译器需要命令行参数来支持C++11标准,例如,
gcc-std=C++11…

Nit:不要使用
new
,使用
std::make_unique/std::unique_ptr
。可能重复@MichaelBers,不是真正的重复,因为您引用的是POD
int
,而这是一个
向量
指针。我不确定你能从这个问题的任何答案中得到这个问题的答案,尤其是那些年纪大的人。
B my_b{{new A("A1"), new A("A2"), new A("A3"), new A("A4")}};