Можно ли это сделать красиво?
template <class T> Init(T &object, Type type)
{
Collider collider;
switch (type)
{
case TypeA:
collider.InitAsA(object);
break;
case TypeB:
collider.InitAsB(object);
}
}
позвонить с
A a;
Init(a, TypeA);
B b;
Init(b, TypeB);
A и B не имеют общего предка.
void Collider::InitAsA(A &a);
void Collider::InitAsB(B &b);
РЕДАКТИРОВАТЬ:
Collider :: InitAs.. не может быть изменен в шаблон и не может быть изменен вообще, потому что я не могу изменить другой код.
Тип может быть int, на самом деле это перечисление.
С помощью функции Init()
вы можете просто использовать перегрузку функции:
void Init(A &object)
{
Collider collider;
collider.InitAsA(object);
}
void Init(B &object)
{
Collider collider;
collider.InitAsB(object);
}
Однако вы можете просто перегрузить метод Init()
:
void Collider::Init(A &a);
void Collider::Init(B &b);
И тогда, если вы все еще хотите использовать функцию шаблона, она может выглядеть так:
template <typename T>
void Init (T &object)
{
Collider collider;
collider.Init(object);
}