有没有办法为模板类的方法提供默认参数值?例如,我有以下内容:
template<class T>
class A
{
public:
A foo(T t);
};
我应该如何修改此项,以便为foo
提供T
类型的默认参数?例如:T
为int
,则默认值为-23,或T
为char*
,则默认值为"something"
,等等。这是否可能?
答案 0 :(得分: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
的默认构造函数:< / p>
template <typename T> struct MyDefaults
{
static constexpr T value = T();
};
template <> struct MyDefaults<const char *>
{
static constexpr const char * value = "Hello World";
};