可以用一种好的方式来完成吗?
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);
}
关于c++ - 在带有模板参数的模板中使用重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396510/