Создайте конструктор, который может принимать любое количество аргументов. - PullRequest
0 голосов
/ 23 мая 2019

Таким образом, конструктор класса 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 Ответ

4 голосов
/ 23 мая 2019

Самым простым способом было бы использовать 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*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...