2016-01-17 73 views
-1

定義方法我想實現這樣的事情:爲模板類

template <class that, class has, class much, class genericizem> 
class Generic{ 
// using all template stuff 
    Generic &method(Generic &gen1, Generic &gen2); 
}; 

// what I assume is the solution from vage things I've read 

template <class that, class has, class much, class genericizem> 
    using Gen = Generic<that,has,much,genericizem>; 

// and no one wants to see the naive way of writing it. 
Gen &Gen::method(Gen &gen1, Gen &gen2){ 
    return gen1; 
} 

我知道你不能模板命名空間,所以我只是把它寫了很長的路要走?

+0

請安裝並使用拼寫檢查程序。 ;)也就是說,模板和重載函數簡化了你使用的方式,但我不明白你打算如何使用你的代碼。你想要達到的調用語法是什麼?這裏不是所有你需要的類型別名嗎? –

回答

0

你想要什麼,如果我正確理解你的問題,不能做你想要的。即使你的工作using Gen = ...,你仍然需要寫:

template <class that, class has, class much, class genericizem> 
Gen<that,has,much,genericizem> &Gen<that,has,much,genericizem>::method(Gen &gen1, Gen &gen2){ 

監守Gen是一個模板別名,atually相當相當於原Genric

你的成員函數可以被定義爲:

template <class that, class has, class much, class genericizem> 
auto Generic<that,has,much,genericizem>::method(Generic &gen1, Generic &gen2) -> Generic& 
{ 
    /* ... */ 
} 

您不必重複所有的模板參數每次參考Generic時間,因爲Generic代表的類純被實例化。這被稱爲注入類名稱

但請注意,語法上返回類型不在類範圍內,因此您不能在其中使用注入的類名稱。相反,您可以使用auto和尾隨返回類型。

+0

我想你不能寫代碼(或複製粘貼)。汽車是好的,你也是,我也認爲我必須爲參數寫出參數,這是未來的錯誤修正。謝謝!。 – rustypaper

+0

@rustypaper:有時顯得有點複製/粘貼。如果他們真的很麻煩,你可以使用宏,但我會認爲這是最後的手段。 – rodrigo

+0

萬一你想知道,我花了2個小時找到工作20分鐘左右的工作。 – rustypaper