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