C ++模板函数的默认值

时间:2010-07-21 16:07:19

标签: c++ templates default-value

是否可以在C ++中为模板函数的变量定义默认值?

如下所示:

template<class T> T sum(T a, T b, T c=????)
{
     return a + b + c;
}

5 个答案:

答案 0 :(得分:10)

试试这个:

template<class T> T sum(T a, T b, T c=T())
{
     return a + b + c;
}

如果您期望整数类型并且希望默认值为5,您也可以输入T(5)。

答案 1 :(得分:7)

这一切都取决于您可以对类型做出的假设。

template <typename T> T sum( T a, T b, T c = T() ) { return a+b+c; }
template <typename T> T sum2( T a, T b, T c = T(5) ) { return a+b+c; }

第一种情况,它只假设T是默认可构造的。对于价值初始化(IIRC)的POD类型,基本上是0,因此sum( 5, 7 )将调用sum( 5, 7, 0 )

在第二种情况下,您需要可以从整数构造类型。对于整数类型,sum( 5, 7 )会调用sum( 5, 7, int(5) ),相当于sum( 5, 7, 5 )

答案 2 :(得分:2)

是的,您可以定义默认值。

template <class T> 
T constructThird()
{
    return T(1);
}

template <class T> 
T test(T a, 
       T b, 
       T c = constructThird<T>())
{
    return a + b + c;
}

不幸的是,constructThird不能将a和b作为参数。

答案 3 :(得分:1)

是的,只需要T的构造函数,无论你放在那里有什么价值。鉴于您显示的代码,我假设您可能希望该参数为0。如果您想要构造函数有多个参数,可以将T(arg1, arg2, arg3)作为默认值。

答案 4 :(得分:0)

是!

但是你应该至少知道T可能是什么,或者它是无用的。

您无法为功能设置模板参数的默认值,即禁止此操作:

template<typename T=int> void f(T a, T b);