创建一个构造函数,即capabe可以接受任意数量的参数

时间:2019-05-23 13:56:05

标签: c++ c++11

因此,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;
    }
};

1 个答案:

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

See it online!


注释中的信息后,

编辑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*