2017-02-23 69 views
0

內部功能類模板採取以下類:與行爲不同對於不同的輸入

template <class T> 
class Foo 
{ 
private: 
    T x; 
public: 
    Foo(T y) { x = y; } 
    T bar(); 
}; 

說我初始化Foo()int,或與double類型對象。我希望bar()對這兩種類型的行爲有所不同。我想簡單的解決方法是讓bar()調用另一個對x類型作出反應的模板函數,但也許有另一種通用的方法來處理而不定義嵌套函數。

注意:希望bar()採取x作爲參數,我想x到留民營和只是調用由bar()

+0

您可以針對您的課程使用模板專門化,並針對不同的「T」不同地實施'bar()'。 – yeputons

+0

@yeputons可能這是我想要的 - 如何做到這一點..? – Tim

回答

1

最簡單的方法是

#include <type_traits> 

template <class T> 
class Foo 
{ 
private: 
T x; 
public: 
Foo(T y) { x = y; } 
T bar() { 
    if(std::is_same<T, int>::value) { 
     return 0; 
    } else { 
     return 0.0; 
    } 
} 
}; 

有更多的方法來做到這一點。例如,您可以專門針對該課程。提示:如果你不想檢查int和double,但是對於整數類型和浮點類型,那麼也有特性。

相關問題