Re: Question on function template
Brijesh kant ha scritto:
I recently came to know that the default template paramater in the
function templates are not allowed in c++. While the default template
paramater is allowed in class template. Is there any specific reason for
not including this functionality in the function template.
This is true in C++03, but will change in C++0x. Default template
parameters are going to be allowed also on function templates.
For example the sample code below will not compile in c++
template < class T = int >
T function ( T a )
{ return a+1; }
main()
main() *must* return int and you *can't* omit the return value. Some
permissive compilers allows that, but you shouldn't rely on such
non-conforming behaviour.
{
function<>( 10 );
}
Well... this is not the right example to show that, because the template
parameter is being deduced. In fact if you write:
template <class T = float> // C++0x
T function(T a)
{ return a + 1; }
int main()
{
function(10); // instantiates function<int>, not function<float>!
}
As 10 is an int, T is deduced to be int even if you have a default
template parameter. Default template parameters can be useful for return
values and non-deduced contexts:
template <class T = int> // C++0x
T function();
template <class T>
struct identity
{
typedef T value;
};
template <class T = int> // C++0x
T nondeduced(identity<T>::value a); // T is not deducible from a
int main()
{
function(); // T = int (because of default parameter)
function<float>(); // T = float (explicitly specified)
nondeduced(10); // T = int (because of default parameter)
nondeduced(10.f); // T = int (same reason)
nondeduced<float>(10); // T = float (explicitly specified)
}
HTH,
Ganesh
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]