Vincent
Vincent

Reputation: 60381

Default template argument for functions of classes : where to specify it?

Where do I have to specify default template parameters of classes member functions (assuming that the declaration is (of course) in the "class body", and the function definition is outside the class body) for each case in C++2011 :

In the definition, in the declaration or both ?

Upvotes: 4

Views: 320

Answers (2)

Travis Ervin
Travis Ervin

Reputation: 26

Well, From my experiences creating template classes and methods, you specify a template function as such:

template<typename T>
T MyFunc(T &aArg1, T &aArg2)
{
    //...Definition Goes Here
}

The typename T is the template argument type for the template function and you need to pass that data type consistently to each argument labeled as "T". This means that aArg2 has to be whatever data type aArg1 is. Now, when you call this function, you call it like so: MyFunc</*datatype*/int>(iArg1, iArg2); the two arguments have to be data type "int" or you'll get a warning or an error.

Now, this also applies to class methods (I think that is what you meant by "classes member functions") which are the functions supplied by the class (i.e. MyClass::MyFunc()) so when you declare a class method that is a template method, you do it in the same manner. Here is an example class:

class MyClass
{
   MyClass();
   ~MyClass();

   template<typename T> 
   static T MyStaticFunc(T aArg) { return aArg; }


   template<typename T> 
   T MyFunc(T aArg) { return aArg; }
}

As you can see, not to difficult. Now, static functions are the same way you just have to be sure t define then in the same module that the class is built in, otherwise, you'll get an error.

Unfortunately, I never really use "friend" methods, so I don't know how to tackle that. I would suspect you would do it in the same way as the other two. I hoped that whole essay of an answer helped.

Upvotes: 1

John McFarlane
John McFarlane

Reputation: 6087

Trying these out in Clang suggests the following:

  • For non-static and static functions, specifying the default in either the definition or the declaration is acceptable - but not both and certainly not if they contradict one another;
  • For friend functions, specifying a default inside the class definition results in an error.

Upvotes: 0

Related Questions