模板类方法的默认参数

时间:2011-09-25 13:51:46

标签: c++ templates default-parameters

有没有办法为模板类的方法提供默认参数值?例如,我有以下内容:

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

我应该如何修改此项,以便为foo提供T类型的默认参数?例如:Tint,则默认值为-23,或Tchar*,则默认值为"something",等等。这是否可能?

1 个答案:

答案 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";
};