0
有沒有方法可以爲模板類的方法提供默認參數值?例如,我有以下幾點:模板類的方法的默認參數
template<class T>
class A
{
public:
A foo(T t);
};
我應該如何修改這個給foo
T
類型的默認參數?例如:T
爲int
則默認值爲-23,或者T
爲char*
,則默認值爲"something"
等。這甚至可能嗎?
有沒有方法可以爲模板類的方法提供默認參數值?例如,我有以下幾點:模板類的方法的默認參數
template<class T>
class A
{
public:
A foo(T t);
};
我應該如何修改這個給foo
T
類型的默認參數?例如:T
爲int
則默認值爲-23,或者T
爲char*
,則默認值爲"something"
等。這甚至可能嗎?
如果您希望默認參數只是默認值(通常爲零),那麼您可以編寫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";
};
你也可以使價值成爲一個靜態成員函數。 –