Как достичь полиморфизма с помощью шаблонных функций?
В моем проекте у меня есть базовый абстрактный класс с интерфейсом, который реализуют производные классы. Эти производные классы имеют универсальные функции, которые принимают параметры различных типов. Я написал эти универсальные функции в своих производных классах, используя шаблоны функций.
Я хочу добавить эти шаблонные функции в интерфейс моего базового класса. Таким образом, я могу достичь полиморфизма: принять базовый класс в других функциях и вызвать эти шаблонные функции в производных классах.
Когда у нас есть нормальные функции, мы делаем виртуальные и переопределяем, но вы не можете делать виртуальные с шаблонными функциями.
Я пытался сделать чисто абстрактные шаблонные функции в моем абстрактном базовом классе, но это не работает.
Вот небольшая программа с функциональностью, которую я пытаюсь достичь, которая не компилируется из-за " виртуального шаблона...`:
#include <vector> class ObjectTransformerBaseAbstractClass { public: virtual template<typename TStructure> TStructure ToStructure(std::vector<unsigned char> bytes) = 0; virtual template<typename TStructure> std::vector<unsigned char> ToBytes(TStructure structure) = 0; }; class ObjectTransformer1 : public ObjectTransformerBaseAbstractClass { template <typename TStructure> TStructure ToStructure(std::vector<unsigned char> bytes) { // some implementation } template <typename TStructure> std::vector<unsigned char> ToBytes(TStructure structure) { // some implementation } }; class ObjectTransformer2 : public ObjectTransformerBaseAbstractClass { template <typename TStructure> TStructure ToStructure(std::vector<unsigned char> bytes) { // some other implementation } template <typename TStructure> std::vector<unsigned char> ToBytes(TStructure structure) { // some other implementation } }; template <typename TStructure> void coutStructureBytes(ObjectTransformerBaseAbstractClass *objectTransformerBaseAbstractClass, TStructure structure) { // transform structure to bytes using the passed objectTransformerBaseAbstractClass object and cout it. }
В моем базовом классе мне нужно сказать: "реализуйте эти чистые абстрактные универсальные функции, которые принимают различные параметры разных типов и делают что-то в производных классах". И в моих производных классах мне нужно реализовать эти чистые абстрактные универсальные функции, которые принимают параметры разных типов.
Я не понимаю, как достичь этой функциональности, которую я хочу иметь(которую вы можете увидеть в приведенной выше программе, если она скомпилирована и работает). Пожалуйста, порекомендуйте решение или объясните, как это сделать.
Что я уже пробовал:
Я пытался сделать это с помощью виртуальных функций, но virtual не работает с шаблонами.
0x01AA
Вы не думали использовать может быть Извините, это тоже не работает. Та же проблема и с виртуальным...auto
для параметров? Кажется, все гораздо проще.
Но Взгляните сюда, принятое решение. Может быть, это поможет:
c++ - шаблоны не могут быть " виртуальными’ - переполнение стека[^]