c++ - 类 : where to specify it? 函数的默认模板参数

标签 c++ templates c++11 default

对于 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 的方式相同,否则,您将收到错误。

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

关于c++ - 类 : where to specify it? 函数的默认模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910755/

相关文章:

c++ - 在 C++ 中打印重复的字母

c++ - 如何使用opencv获取笔划路径?

c++ - 如何获取直接连接到我的PC的计算机的IP地址

c++ - 将所有权从 std::vector 转移到 std::shared_ptr

c++ - 缺少 shared_ref

c++ - 编译时指针 "does not have a type"?

eclipse - Eclipse 中的 Jinja2 模板支持

java - 如何将对象传递给 thymeleaf 模板并访问其属性?

c++ - 为不需要专门化的 double 和 std::complex 创建函数模板

C++11 typedef 别名编译错误