C ++: инициализировать массив объектов с параметрами в другом классе - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь создать класс, у которого в качестве члена будет массив объектов другого класса. Этот «нижний» конструктор класса требует параметра (без c-tor по умолчанию), и я не уверен, как это сделать.

In .hpp
class ProcessingElement : public sc_core::sc_module
{
public:
    ProcessingElement( sc_core::sc_module_name name );
    sc_core::sc_module_name name;
};

In .cpp
ProcessingElement::ProcessingElement( sc_core::sc_module_name name ) : name(name) {
    //not relevant
}

и "высший" класс:

In .hpp
class QuadPE : public sc_core::sc_module
{
public:
    QuadPE( sc_core::sc_module_name name );
    ProcessingElement pe[4];
};

In .cpp
QuadPE::QuadPE( sc_core::sc_module_name name ) : pe[0]("PE0"), pe[1]("PE1"), pe[2]("PE2"), pe[3]("PE3") {
    //non relevant
}

Это, очевидно, приводит к ошибке, но я не уверен, как ее исправить. Я хотел бы по возможности избегать использования векторов, поэтому некоторые решения, которые я нашел на SO, которые включают векторы, не идеальны для меня.

Как примечание, sc_core::sc_module_name - это typedef, равный const char* или что-то подобное, к сожалению, не могу сейчас его найти.

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Просто Агрегировать инициализировать массив:

QuadPE::QuadPE( sc_core::sc_module_name name ) : pe{"PE0", "PE1", "PE2", "PE3"} {}

Хотя вы, возможно, не захотите использовать std::vector, я все же предлагаю вам взглянуть std::array. Это также агрегат, который служит тонкой (без накладных расходов) оберткой над массивом в стиле c. Тем не менее, он имеет полноценную семантику и является полнофункциональным контейнером стандартной библиотеки. Так что вам может показаться менее неловким работать с ним.

...