为什么一次包装 typedef 函数签名与原始签名不匹配
Why once wrap typedef function signature doesn't match the original signature
为什么这段代码先打印1,然后打印0?
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
std::cout << std::is_same<GLFWkeyfun, void(*)(GLFWwindow*, int, int, int, int)>::value << std::endl;
std::cout << std::is_same<std::function<GLFWkeyfun>, std::function<void(GLFWwindow*, int, int, int, int)>>::value << std::endl;
请注意,GLFWkeyfun
是函数指针类型。相反,函数类型被指定为std::function<void(GLFWwindow*, int, int, int, int)>
中std::function
的模板参数。
我们应该将函数类型指定为std::function
。您可以在GLFWkeyfun
上应用std::remove_pointer
,例如
std::cout << std::is_same<std::function<std::remove_pointer_t<GLFWkeyfun>>,
// ^^^^^^^^^^^^^^^^^^^^^^ ^
std::function<void(GLFWwindow*, int, int, int, int)>>::value
<< std::endl;
如果你的编译器不支持C++14,那么
std::cout << std::is_same<std::function<std::remove_pointer<GLFWkeyfun>::type>,
// ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
std::function<void(GLFWwindow*, int, int, int, int)>>::value
<< std::endl;
演示
相关文章:
- 模板参数推导失败,函数参数/参数不匹配
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 为什么使用不匹配的参数调用重载函数仍然有效
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 重载函数的地址与所需类型不匹配
- 为什么一次包装 typedef 函数签名与原始签名不匹配
- 如果在开关情况下不匹配,为什么此函数返回 ASCII 值?
- 用户定义的构造函数重载与参数超类的重载不匹配
- C ++尝试访问映射中的元素会给我一个不匹配的函数调用错误
- 编译模板函数时形式参数列表不匹配
- 演绎指南和具有可变参数模板构造函数的可变参数类模板 - 参数包长度不匹配
- C++ 模板和派生类,与函数不匹配
- 为什么在列表initialization函数参数时,显式构造函数不匹配
- 输出与 c 中的 strcmp() 函数不匹配
- 由于函数指针类型定义与具有正确const逻辑的指定函数不匹配,导致编译警告
- Java Opencv Mat构造函数不匹配
- 为什么这个带有可变模板参数的构造函数不匹配?
- C++ 多重继承:函数不匹配