некоторой сущности, у которой может меняться тип возвращаемого параметра у методов (int, float, double), понятно что можно параметризовать шаблоном, но тогда пакетной обработки лишаемся. Какие тут альтернативы?
что значит "сущность" ?
Какой-то объект с интерфейсом. Либо базовый класс либо концепт. Но хотелось бы в рантайме иметь возможность подменять реализации
Так, а что за пакетная обработка ?
ну то что классы становятся не связанные друг с другом и нельзя взять массив указателей базовых классов и обработать циклом
Это как так когда они связаны, и когда всегда можно взять массив указателей и отработать циклом?
Напиши короче пример кода, нифига не ясно
В одной иерархии наследования. Ну вроде может быть что у меня базовый класс и 2 наследника. Создаю массив указателей на базовый и там могут быть наследники, могу в цикле их обработать
Ну, у одного метода может быть только один набор параметров и один тип возвращаемого значения. Если они разные - это разные методы. Ты можешь сделать много методов и дискриминатор, говорящий, какой из них вызывать. Ты можешь возвращать что-то типа std::variant или std::any, тоже вариант.
std::vector<Animal *> animals; Dog * dog; Cat * cat; base.push_back(cat); base.push_back(dog); for (auto * animal: animals) { //типы в одной иерархии, пакетно обрабатываем animal.say(); } template <typename T> Animal : T { mew(){ this.mew(); } } Animal<Dog> Animal<Cat> Два разных типа.
Вот со слова template как-то неясно стало... И где ВОЗВРАТ - я не понял.
Возврат в варианте с virtual functions кажется что вообще не возможен. Либо возвращать variant от флоата, инта и прочего А с шаблонами вот Вот пример допустим с возвращаемым значением template <typename T> Animal : T { auto mew(){ return this.mew(); } } Animal<Dog> dog Animal<Cat> cat auto dog_say = dog.say(); auto cat_say = cat.say(); Как тут связать типа в иерархию вот хз...
А что сделать то хочешь
Хочу сделать интерфейс в котором может варьироваться возвращаемое значение
Ну оно может варьироваться
У тебя тут виртуальных функций нет если что
Варианта только два, — возвращать вариантные структуры типа variant/any/ свой union с дискриминатором — возвращать корневой объект полиморфного типа из иерархии классов, параллельной основной иерархии.
Это к другому примеру коментарий
Обсуждают сегодня