Если у меня есть шаблонный класс, который я хочу создать с различными типами данных:
template <typename T>
class A {
T value;
// ...
};
И я также хочу использовать объекты этого класса в контейнере стандартной библиотеки шаблонов (скажем, vector
).
В моем понимании создание вектора A
объектов не будет принято компилятором, потому что A<int>
и A<char>
на самом деле разные типы, и я не могу поместить их в один и тот же вектор.
Обходной путь, который я нашел, - это создание базового класса, производного шаблонного класса и вектора указателей базового класса.
class ABase {
// ...
};
template <typename T>
class ADerived : public ABase{
T value;
// ...
};
std::vector<BaseA*> mySuperVector;
Я начинаю экспериментировать с шаблонами, чтобы лучше понять, и мне интересно, есть ли лучшие решения для этого. Мой обходной путь, описанный выше, также вызывает у меня головную боль, потому что я боюсь, что в какой-то момент типирование будет неизбежным.