对于 C++2011 中的每种情况,我必须在哪里指定类成员函数的默认模板参数(假设声明(当然)在“类主体”中,并且函数定义在类主体之外):
- “正常”功能
- 静态函数
- 朋友功能
在定义中,在声明中还是两者兼而有之?
好吧,根据我创建模板类和方法的经验,您可以这样指定模板函数:
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 的方式相同,否则您将收到错误消息。
不幸的是,我从来没有真正使用过“朋友”方法,所以我不知道如何解决这个问题。我怀疑您会以与其他两个相同的方式进行操作。我希望答案的整篇文章有所帮助。
在 Clang 中尝试这些建议如下:
static
andstatic
函数,在定义或声明中指定默认值是可以接受的——但不能同时指定两者,如果它们相互矛盾,当然也不能;friend
函数,在定义中指定默认值class
会导致错误。