ich einen Code haben, die effektiv reduziert sich aufÄndern eines Elementinitialisierung Liste
#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 }) {}
};
Der Compiler beschwert sich, dass keine Instanz von A::A
die Argumentliste übereinstimmt. Gibt es eine Möglichkeit, die { int, std::initializer_list<int>, int }
zu einer std::initializer_list<int>
zu glätten oder muss ich A
einen zusätzlichen Konstruktor geben, um diese Situation zu behandeln? Was passiert, wenn ich die Klasse A
nicht ändern kann?
A 'std :: initializer_list' nicht veränderbar ist. Diese Vorlage ist hauptsächlich für den eigenen Gebrauch des Compilers gedacht. Die einzige Möglichkeit, eine neue 'std :: initializer_list 'zu initialisieren, besteht darin, einen Standardkonstruktor zu verwenden, der eine leere Liste oder eine Klammerkonstante erzeugt. In diesem Fall benötigt 'A' einen anderen Konstruktor, der einen' vector' Parameter akzeptiert und verwendet, um 'm_sizes' zu initialisieren; dann können Sie diesen Konstruktor verwenden. Wenn Sie die Klasse "A" nicht ändern können, kann nichts getan werden. C++ funktioniert nicht so. –