在模板内部使用模板参数重载函数

时间:2013-10-16 06:23:34

标签: c++ templates

能以一种好的方式完成吗?

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

1 个答案:

答案 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);
}