关于C ++中的模板类型参数

时间:2011-10-27 21:19:37

标签: c++ templates object void

我一直在浏览这里的一些问题,我发现一些示例代码传递(看起来像)一个整数,类型为void,作为模板化对象的类型参数。这是我的意思的一个例子:

SomeRandomObject<void(int)> Object;

如果有人能够解释代码的“void(int)”部分及其作用,我将不胜感激。

2 个答案:

答案 0 :(得分:7)

该类型是“需要int并返回void”的函数。

答案 1 :(得分:2)

类型是函数类型。你可能不太熟悉它,因为直到现在它才被用在指针类型中:

typedef int (ft)(void);  // Huh?  (raw function type)
typedef ft *fp;          // ???   (pointer to function)

typedef int (*fp_oldstyle)(void); // Ahh... (same as fp)

函数本身确实有类型,但由于您不能声明该类型的变量或对它的引用,您通常使用的唯一指针是指针,它们在最后一行的熟悉语法中声明。对于任何函数int foo(void);foo&foo都被解释为指针,因此不需要“原始”函数类型ft

但是,使用围绕std::functionstd::bind和lambdas的新模板魔术,现在在模板参数中看到裸函数类型更为常见。