Хорошая ли идея использовать std::initializer_list в полиморфном классе? ⇐ 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++ кажется, что функция-член не может быть шаблоном функции (Изменение: функция-член может быть шаблоном функции; виртуальная функция не может быть шаблоном функции!).
>
И именно поэтому я не могу написать абстрактный метод с вариативным шаблоном.
Недопустимый пример показан ниже:
Базовый класс { публика: виртуальный ~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) переопределить { // ...... } } Это работает, но я не знаю, хорошая ли это идея. Сделает ли это мою программу очень медленной? Или есть ли другой способ добиться полиморфизма, а также вариативных параметров?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
На основе диапазона для Brace initializer по сравнению с неконфектными значениями?
Anonymous » » в форуме C++ - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Хорошая ли идея использовать Kafka для операций обновления и вставки в Java-проект?
Anonymous » » в форуме JAVA - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Хорошая ли идея использовать длинный хэш-код в качестве первичного ключа в базе данных?
Anonymous » » в форуме C# - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-