Hi,
is it possible to define default value for variables of a template functions in C++? something like below:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
Hi,
is it possible to define default value for variables of a template functions in C++? something like below:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
Yes !
However you should at least have an idea about what T could be or it's useless
What you can't do is setting default value of template parameters for functions, ie. this is forbidden:
template<typename T=int> void f(T a, T b);
Try that :
template<class T> T sum(T a, T b, T c=T())
{
return a + b + c;
}
You can also put T(5) if you are waiting an integral type and want the default value to be 5.
Yes, there just needs to be a constructor for T
from whatever value you put there. Given the code you show, I assume you'd probably want that argument to be 0
. If you want more than one argument to the constructor, you could put T(arg1, arg2, arg3)
as the default value.
It all depends on the assumptions that you can do about the type.
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; }
The first case, it only assumes that T
is default constructible. For POD types that is value inititalization (IIRC) and is basically 0
, so sum( 5, 7 )
will call sum( 5, 7, 0 )
.
In the second case you require that the type can be constructed from an integer. For integral types, sum( 5, 7 )
will call sum( 5, 7, int(5) )
which is equivalent to sum( 5, 7, 5 )
.