4

对于 C++2011 中的每种情况,我必须在哪里指定类成员函数的默认模板参数(假设声明(当然)在“类主体”中,并且函数定义在类主体之外):

  • “正常”功能
  • 静态函数
  • 朋友功能

在定义中,在声明中还是两者兼而有之?

4

2 回答 2

1

好吧,根据我创建模板类和方法的经验,您可以这样指定模板函数:

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

typename T是模板函数的模板参数类型,您需要将该数据类型一致地传递给标记为“T”的每个参数。这意味着 aArg2 必须是 aArg1 的任何数据类型。现在,当您调用此函数时,您可以这样调用它: MyFunc</*datatype*/int>(iArg1, iArg2);两个参数必须是数据类型“int”,否则您将收到警告或错误。

现在,这也适用于类方法(我认为这就是您所说的“类成员函数”),它们是类(即MyClass::MyFunc())提供的函数,因此当您声明一个作为模板方法的类方法时,您可以这样做以相同的方式。这是一个示例类:

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

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


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

如您所见,并不难。现在,静态函数与您必须确保在内置类的同一模块中定义 then 的方式相同,否则您将收到错误消息。

不幸的是,我从来没有真正使用过“朋友”方法,所以我不知道如何解决这个问题。我怀疑您会以与其他两个相同的方式进行操作。我希望答案的整篇文章有所帮助。

于 2012-09-09T06:48:44.400 回答
0

在 Clang 中尝试这些建议如下:

  • 对于非staticandstatic函数,在定义或声明中指定默认值是可以接受的——但不能同时指定两者,如果它们相互矛盾,当然也不能;
  • 对于friend函数,在定义中指定默认值class会导致错误。
于 2012-08-13T18:26:19.983 回答