У меня есть некоторый код, который эффективно снижает доИзменение списка инициализации членов
#include <vector>
class A {
std::vector<int> m_sizes;
public:
A(std::initializer_list<int> const& sizes) : m_sizes(sizes) {}
};
class B {
A m_a;
public:
B(int size_front, int size_back, std::initializer_list<int> const& sizes) : m_a({ size_front, sizes, size_back }) {}
};
Компилятор жалуется, что ни один экземпляр A::A
не совпадает со списком аргументов. Есть ли способ сгладить { int, std::initializer_list<int>, int }
до std::initializer_list<int>
или мне нужно дать A
дополнительный конструктор для обработки этой ситуации? Что делать, если я не могу изменить класс A
?
'станд :: initializer_list' не изменяемые. Этот шаблон в основном предназначен для использования компилятором. Единственный способ инициализировать новый 'std :: initializer_list' - это конструктор по умолчанию, создающий пустой список или скопированную константу. В этом случае 'A' нуждается в другом конструкторе, который принимает параметр' vector', и использует это для инициализации 'm_sizes'; то вы можете использовать этот конструктор. Если вы не можете изменить класс 'A', ничего не может быть сделано. C++ не работает. –