能以一种好的方式完成吗?
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 ..无法更改为模板,也无法更改,因为我无法更改其他代码。
Type可以是int,实际上它是枚举。
答案 0 :(得分:5)
使用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);
}