Использование перегруженной функции внутри шаблона с параметром шаблона

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, на самом деле это перечисление.

Теги:
templates

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню