Tim Frink wrote:
> Hi,
>
> how can I set default values to template parameters?
>
> I've this code:
>
> class A
> {
> template<typename T>
> void foo( string = "", T* = 0, bool (T::*func)(void) = 0 );
> };
>
> when I invoke A::foo with the appropriate 3 parameters, everything
> works fine. However, I'd like to invoke the function foo also
> with the first parameter, like objectA.foo( string("test") );
> When I try to compile, I get the error message:
> "no matching function for A::foo(std::string)".
>
> Why?
Because the compiler needs to know what 'T' is. It cannot deduce
the type from an integral expression ('0'). You need to tell it
what the type T is by supplying the template argument, like
objectA.foo<sometype>(string("test"));
> I set the second and third parameter of foo to default values,
> so when the second and third argument are not specified, they should
> be set to 0. But this seems not to work that way.
Set to 0 of what type? '0' has the type 'int'. It is convertible
to any pointer type and to any pointer-to-member type, but the
compiler needs to know what the destination type is. It cannot
know from the type from the expression you supplied, that's why it
complains.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


|