Я пишу код для отображения на встроенном устройстве, которое отображает экраны, каждый с некоторым количеством кнопок.Количество кнопок отличается на разных экранах, но их количество известно во время компиляции.
Прямо сейчас, вот упрощенная версия того, как настроены классы:
class Button;
class Screen {
private:
Button *buttons;
unsigned int buttonCount;
public:
Screen(Button *_buttons, unsigned int _buttonCount)
: button(_buttons), buttonCount(_buttonCount) {}
};
И вот идея того, как я их использовал:
// For this example, Button has a constructor taking a string for
// the button's label
static Button buttonsForMainMenu[] = {
Button("Do this"),
Button("Do that"),
Button("Exit")
};
Screen mainMenu (buttonsForMainMenu, 3);
Screen *currentScreen = &mainMenu;
int main() {
// ...
while (1) {
currentScreen->show();
// handle buttons, etc.
}
}
Я бы хотел избежать отдельного массива для кнопок.В идеале, что-то вроде этого:
Screen mainMenu ({
Button("Do this"),
Button("Do that"),
Button("Exit")
});
Этот код предназначен для встроенной системы, которая не нуждается в динамическом выделении памяти, поэтому я хотел бы избегать этого.std::array
нужен размер массива при его объявлении в объявлении класса, но экраны будут иметь разное количество кнопок.Класс Screen, в который я не верю, может быть шаблонным из-за currentScreen
.
Есть ли у класса способ иметь массив, в котором размер массива будет найден при его объявлении / во время компиляции?