2011-09-25 21 views
0

有沒有方法可以爲模板類的方法提供默認參數值?例如,我有以下幾點:模板類的方法的默認參數

template<class T> 
class A 
{ 
public: 
    A foo(T t); 
}; 

我應該如何修改這個給fooT類型的默認參數?例如:Tint則默認值爲-23,或者Tchar*,則默認值爲"something"等。這甚至可能嗎?

回答

3

如果您希望默認參數只是默認值(通常爲零),那麼您可以編寫A foo(T t = T())。否則,我建議特質類:

template <typename T> struct MyDefaults 
{ 
    static const T value = T(); 
}; 

template <> struct MyDefaults<int> 
{ 
    static const int value = -23; 
}; 


template<class T> 
class A 
{ 
public: 
    A foo(T t = MyDefaults<T>::value); 
}; 

編寫的類定義只適用於整數類型內部的恆定值,我相信,所以你可能把它外面寫的所有其他類型:

template <> struct MyDefaults<double> 
{ 
    static const double value; 
}; 
const double MyDefaults<double>::value = -1.5; 

template <> struct MyDefaults<const char *> 
{ 
    static const char * const value; 
}; 
const char * const MyDefaults<const char *>::value = "Hello World"; 

在C++ 11,你可以或者可以說出static constexpr T value = T();,使非整數值的模板工作,前提是T有一個聲明constexpr默認構造函數:

template <typename T> struct MyDefaults 
{ 
    static constexpr T value = T(); 
}; 

template <> struct MyDefaults<const char *> 
{ 
    static constexpr const char * value = "Hello World"; 
}; 
+0

你也可以使價值成爲一個靜態成員函數。 –