Хорошая ли идея использовать std::initializer_list в полиморфном классе?C++

Программы на C++. Форум разработчиков
Гость
Хорошая ли идея использовать std::initializer_list в полиморфном классе?

Сообщение Гость »


Я застрял в этой ситуации.

В C++ кажется, что функция-член не может быть шаблоном функции (Изменение: функция-член может быть шаблоном функции; виртуальная функция не может быть шаблоном функции!).
>
И именно поэтому я не могу написать абстрактный метод с вариативным шаблоном.

Недопустимый пример показан ниже:

Базовый класс { публика: виртуальный ~Base() {}; // Неверный! Пересмотр: мне не следует брать init в качестве примера. Поэтому я добавил foo, как показано ниже. шаблон виртуальная пустота init (Ts... args) = 0; // Неверный! шаблон виртуальная пустота foo(Ts... args) = 0; } Однако мне нужно написать абстрактный метод, чтобы, если я получаю указатель Base (или ref), когда я вызываю init()(Исправить: мне не следует брать init в качестве примера, поэтому я добавил еще одну функцию foo()), фактически будет вызываться реализация производного класса .

В результате мне на ум приходит std::initializer_list.

Базовый класс { публика: виртуальный ~Base() {}; // Действительный! Пересмотр: мне не следует брать init в качестве примера. Поэтому я добавил foo, как показано ниже. виртуальная пустота init (std::initializer_list initList) = 0; // Действительный! виртуальная пустота foo(std::initializer_list initList) = 0 } Производный класс: публичная база { публика: // Переопределить {foo()} в virtual void foo(std::initializer_list initList) переопределить { // ...... } } Это работает, но я не знаю, хорошая ли это идея. Сделает ли это мою программу очень медленной? Или есть ли другой способ добиться полиморфизма, а также вариативных параметров?

Вернуться в «C++»