Этот вопрос относится как к инициализации массива, так и к иерархии модулей SystemC.
У меня есть класс, который не копируется, не перемещается и не имеет конструктора по умолчанию:
class Object : public sc_module {
public:
Object(string name, Configuration config);
Object(const CPU& that) = delete;
};
и другой класс, который имеет массив из них:
class Object2 : public sc_module {
public:
std::array<Object, 2> obj_array;
Object2() : obj_array <--??-->
{}
};
Мне нужно инициализировать obj_array
с помощью Objects
, которые нельзя копировать и перемещать.
Я пробовал целую кучу комбинаций, и одна вещь, которая компилируется, это:
class Object2: {
public:
std::array<Object, 2> obj_array;
//note the double braces on this initializer list
Object2() : obj_array {{ {"string1", config}, {"string2", config} }}
{}
};
Это работает, но позже я вижу странное поведение в коде: когда я распечатываю имена Objects
в obj_array
, первое правильное Object2.string1
, но следующее действительно странное Object2.string1.string2
, когда оно должно быть просто Object2.string2
).
Я знаю, что многие люди задавали довольно похожие вопросы, но я пытаюсь выяснить, что именно здесь происходит. Мне также кажется, что у меня слишком много фигурных скобок в этом списке инициализаторов, но иначе он не скомпилируется.
Я использую g++ 6.4.0 с флагом -std=c++14
Дело в том, что если я создам в теле конструктора еще один массив, например class Object2: { public: std::array obj_array; // обратите внимание на двойные фигурные скобки в этом списке инициализаторов Object2() : obj_array {{ {"string1", config}, {"string2", config} }} { Obj arr[2] {{"test", config}, { "тест2", конфиг}}; } };
Все выглядит нормально. arr
Имена объектов правильные, как и их родители.
Я знаю, что это эзотерический вопрос, но мне нужна помощь, чтобы точно понять, какие механизмы происходят во время моей инициализации obj_array.
std::array
не работает, а обычный локальный массив работает. Тогда возникает очевидный вопрос: пробовали ли вы простой массив элементов? - person HolyBlackCat   schedule 02.05.2018CPU
наObject
. - person NuPagadi   schedule 02.05.2018string{"string1"}
внутри фигурных скобок. Как 2_ - person NuPagadi   schedule 02.05.2018