0

它可以以一种好的方式完成吗?

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,实际上是一个枚举。

4

1 回答 1

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);
}
于 2013-10-16T06:35:54.827 回答