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



以下语法有什么区别:

template<typename T>
struct A { ... };
A<void (*)()> o1; // <--- ok
A<void()> o2;  // <----- ??

想知道除了库之外的第二种语法的实际用途(我检查了我们不能在A中声明void()的对象)。我已经提到了这个问题,但这无济于事。

void() 是不带参数且不返回任何内容的函数类型。

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

作为使用void()和有用的示例,请查看std::function - 它使用的语法比您必须传入函数指针签名要好得多。 当您的意思是"我想告诉此模板类调用的签名"时,可以使用完全相同的语法。

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

最新更新