C ++中非函数指针的正确用法是什么?

时间:2011-08-16 16:14:21

标签: c++ templates

在C ++中,您可以传入“函数类型”,它类似于函数指针,但它们只是函数的类型而不是指向它的指针。例如:

template< typename T >
class MyTemplateClass
{
   // ...
};

// ... and later...

MyTemplateClass<void (int, int)> mtc;

此表格的正确名称是什么?这是“功能类型”吗?

更新

我编辑了我的例子,以便更清楚一些。但是,请记住我试图指出的样本的主要部分是void (int, int)部分。

3 个答案:

答案 0 :(得分:6)

是的,这个词是“功能类型”。

答案 1 :(得分:3)

是的,这是一个“功能类型”

8.3.5 [dcl.fct]说

  
      
  1. 在声明中,其中D的格式为D1 ( parameter-declaration-clause ) cv-qualifier-seq 选择 ref-qualifier 选择 exception-specification opt attribute-specifier-seq opt [...]
  2.   
  3. 在声明中,其中D的格式为D1 ( parameter-declaration-clause ) cv-qualifier-seq 选择 ref-qualifier 选择 exception-specification opt attribute-specifier-seq 选择 trailing-return-type [...]
  4.   
  5. 任何一种形式的类型都是函数类型
  6.   

答案 2 :(得分:1)

它们只是函数指针,因为语法有点类似;否则它们与函数指针无关(即它们不包含任何数据或任何此类事物)。但是,David Rodriguez在下面指出,他们可能被认为与intint*相关的方式相关。

无论如何,它们只是类型,例如int(不是 int,只是int。)