簡體   English   中英

在帶有模板參數的模板中使用重載函數

[英]Use of overloaded function inside template with template param

可以用一種不錯的方法嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM