因此,B类构造函数应使用任意数量的A*
作为参数,并简单地push_back
将这些指针指向_vec
向量。
我尝试使用可变参数模板std::initalizer_list
。似乎不适合。也许我在这里使问题复杂化了。最近2天在任何地方都找不到解决方案。
//very shematic code, just to get the idea
Class A
{
//members
};
Class B
{
private:
std::vector<A*> _vec;
public:
B(A* much_arguments)
{
_vec.push_back(much_arguments); //schematically
//do other stuff;
}
};
答案 0 :(得分:4)
最简单的方法是使用std::initializer_list
:
//very shematic code, just to get the idea
class A
{
//members
};
class B
{
private:
std::vector<A*> _vec;
public:
B(std::initializer_list<A*> many_arguments):
_vec {many_arguments}
{
//do other stuff;
}
};
编辑:
std::initializer_list
不是魔杖。它不会让你做B::B(A*, A*, A*)
。相反,您必须以下列方式之一使用它:
B myObject {new A(), new A(), new A()}; //uniform initialization
B myOtherObject({new A(), new A(), new A()}); // explicit initialization with single std::initializer_list
侧面说明:处理原始指针很少是一个好主意。将std::unique_ptr<A>
或std::shared_ptr<A>
优先于原始指针A*
。