Предположим, что у меня есть этот класс:
class Component1;
class Component2;
// many different Components
class Component42;
class MyClass
{
public:
MyClass(void) {};
std::list<Component1> component1List;
std::list<Component2> component2List;
// one list by component
std::list<Component42> component42List;
};
Я хотел бы создать функцию со следующей сигнатурой:
template<class T> void addElement(T component);
Он должен сделать следующее:
- Если
component
имеет типComponent1
, добавьте его вComponent1List
- Если
component
имеет типComponent2
, добавьте его вComponent2List
и т.д.
Возможно ли это? Какой хороший способ сделать это?
Я могу получить одно и то же поведение с такой функцией, как:
template<class T> void addElement(int componentType, T component);
но я не хочу указывать componentType
следующим образом: это бесполезная информация, и она открывает дверь для возможных ошибок (если componentType
не представляет тип компонента).