我一直在浏览这里的一些问题,我发现一些示例代码传递(看起来像)一个整数,类型为void,作为模板化对象的类型参数。这是我的意思的一个例子:
SomeRandomObject<void(int)> Object;
如果有人能够解释代码的“void(int)”部分及其作用,我将不胜感激。
答案 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::function
,std::bind
和lambdas的新模板魔术,现在在模板参数中看到裸函数类型更为常见。