Мне нужно хранить несколько типов класса шаблона в одном векторе.
Например, для:
template <typename T>
class templateClass{
bool someFunction();
};
Мне нужен один вектор, который будет хранить все:
templateClass<int> t1;
templateClass<char> t2;
templateClass<std::string> t3;
etc
Насколько я знаю, это невозможно, если это может кто-то сказать, как?
Если это невозможно, кто-нибудь может объяснить, как сделать следующую работу?
В качестве работы я попытался использовать базовый класс non template и наследовать класс шаблона из него.
class templateInterface{
virtual bool someFunction() = 0;
};
template <typename T>
class templateClass : public templateInterface{
bool someFunction();
};
Затем я создал вектор для хранения базового класса "templateInterface":
std::vector<templateInterface> v;
templateClass<int> t;
v.push_back(t);
Это вызвало следующую ошибку:
error: cannot allocate an object of abstract type 'templateInterface'
note: because the following virtual functions are pure within 'templateInterface'
note: virtual bool templateInterface::someFunction()
Чтобы исправить эту ошибку, я сделал функцию в templateInterface не чистой виртуальной, предоставив тело функции, которое скомпилировано, но при вызове функции overide не используется, а вместо тела в виртуальной функции.
Например:
class templateInterface{
virtual bool someFunction() {return true;}
};
template <typename T>
class templateClass : public templateInterface{
bool someFunction() {return false;}
};
std::vector<templateInterface> v;
templateClass<int> i;
v.push_back(i);
v[0].someFunction(); //This returns true, and does not use the code in the 'templateClass' function body
Есть ли способ исправить это, чтобы использовать переопределенную функцию или есть ли другой способ обхода нескольких типов шаблонов в одном векторе?