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";
};
你也可以使价值成为一个静态成员函数。 –