创建一个构造函数,即Capabe获取任何数量的参数

Create a constructor, that is capabe take any number of arguments

本文关键字:获取 Capabe 任何数 参数 构造函数 一个 创建      更新时间:2023-10-16

,因此B类构造函数应以任何数量的A*作为参数,而push_back这些指示器将这些指针转换为_vec vector。

我尝试使用variadic模板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;
    }
};

最简单的方法是使用 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

旁注:处理原始指针很少是一个好主意。优于原始指针A*

更喜欢std::unique_ptr<A>std::shared_ptr<A>