函数指针作为模板参数和函数签名作为模板参数之间的区别

时间:2013-01-22 04:07:07

标签: c++ templates function-signature

以下语法之间有什么区别:

template<typename T>
struct A { ... };

A<void (*)()> o1; // <--- ok
A<void()> o2;  // <----- ??

我想知道除了库之外的第二种语法的实际用法(我检查过我们不能在void()内声明A的对象)。我已经提到了这个question,但这没有用。

1 个答案:

答案 0 :(得分:1)

void()是一个不带参数的函数的类型,并且什么都不返回。

void(*)()是指向不带参数的函数的指针类型,并且不返回任何内容。

作为使用void()并且有用的示例,请查看std::function - 它使用的语法比传递函数指针签名要好得多。当你的意思是“我想告诉这个模板类是一个调用的签名”时,你可以使用完全相同的语法。

主要是,这只是语法糖。但糖是生活的调味品。