检查函数指针的属性?

时间:2013-11-30 17:24:40

标签: c++11 function-pointers generic-programming member-function-pointers c++14

假设我在通用上下文中获得了以下代码;

auto function = T::getFunctionPtr();

在编译时是否可以检查'function'是否是一个全局函数而不是静态类方法?

1 个答案:

答案 0 :(得分:2)

在编译时检查'function'是全局函数还是静态类方法的唯一方法是检查'T :: getFunctionPtr()'的返回类型。但是全局函数和静态类方法具有相同的类型,如下所示:

#include <iostream>
#include <typeinfo>
using namespace std;

void GlobalFunc() {}

class A {
  public:
    static void StaticFunc() {}
};

int main() {
  cout << std::boolalpha;
  cout << (typeid(GlobalFunc) == typeid(A::StaticFunc)) << endl;
  return 0;
}

输出“true”。 http://ideone.com/oo70F9。 所以答案是否定的,你不能在编译时这样做。