Tutorial :C++ template function default value



Question:

Is it possible to define the default value for variables of a template function in C++?

Something like below:

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


Solution:1

Try this:

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

You can also put in T(5) if you are expecting an integral type and want the default value to be 5.


Solution:2

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 ).


Solution:3

Yes you can define a default value.

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;  }  

Unfortunately constructThird cannot take a and b as arguments.


Solution:4

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.


Solution:5

Yes!

However you should at least have an idea about what T could be or it's useless.

You can't set the default value of template parameters for functions, i.e. this is forbidden:

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

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »