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

标签 c++ templates function-signature

下面的语法有什么区别:

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/

相关文章:

android - 如何将现有的仅 header 源文件添加到 android studio?

c++ - undefined reference ,为什么

c++ - 为什么这个模板参数推导/重载解析失败?

haskell - 将 IO (Maybe (IO (Maybe a))) 减少到 IO (Maybe a)

C++关于使用的指针

c++ - 从属名称解析和命名空间标准/标准库

c++ - 如何从运行时值转换为模板参数?

python - 将 python 元组放在函数签名中

scala - 如何替换通用匿名函数?

android - std::map 链接器错误 ndk r8c with APP_STL := gnuSTL_static