取消成员函数的类型
Decltype of member functions
class A {
int f(int x, int j) { return 2;}
decltype(f)* p;
};
给出错误:
error: decltype cannot resolve address of overloaded function
我不明白为什么这个错误竟然提到了重载函数。类似地,我认为也许我需要使用作用域操作符来访问函数:
class A {
int f(int x, int j) { return 2;}
decltype(A::f)* p;
};
这仍然给了我一个错误,但更清晰的描述:
error: invalid use of non-static member function 'int A::f(int, int)'
为什么我不允许使用decltype来查找成员函数的类型?或者,将成员函数设置为static
可以消除这两种情况下的错误。
你真正想要的是:
struct a {
int f(int x, int j) { return 2;}
decltype(&a::f) p;
};
现场演示
因为你引用的f
是一个成员函数。推导出的类型为:
int(a::*)(int, int)
没有&
,编译器假设你试图调用函数而不提供参数给它。也许Clang的错误信息更清楚:
error: call to non-static member function without an object argument decltype(a::f) p;
如果你真的不需要指针类型,你可以稍后从<type_traits>
应用std::remove_pointer_t
。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?