2013-10-16 66 views
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); 

甲乙沒有共同的祖先。

void Collider::InitAsA(A &a); 
void Collider::InitAsB(B &b); 

編輯:

撞機:: InitAs ..不能變成模板,並不能在所有的改變,原因我不能改變別人的代碼。

類型可以是int,實際上它是一個枚舉。

+0

什麼是'Type'?你能舉一個'Type1'和'Type2'的例子嗎? – Motti

+0

你有什麼問題? –

+3

你爲什麼要這麼做?難道你不能只是讓'Collider :: Init'成爲模板嗎? – juanchopanza

回答

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