以下语法之间有什么区别:
template<typename T>
struct A { ... };
A<void (*)()> o1; // <--- ok
A<void()> o2; // <----- ??
我想知道除了库之外的第二种语法的实际用法(我检查过我们不能在void()
内声明A
的对象)。我已经提到了这个question,但这没有用。
答案 0 :(得分:1)
void()
是一个不带参数的函数的类型,并且什么都不返回。
void(*)()
是指向不带参数的函数的指针类型,并且不返回任何内容。
作为使用void()
并且有用的示例,请查看std::function
- 它使用的语法比传递函数指针签名要好得多。当你的意思是“我想告诉这个模板类是一个调用的签名”时,你可以使用完全相同的语法。
主要是,这只是语法糖。但糖是生活的调味品。