我在引用MyClass类的成员函数时遇到麻烦。请把这个抽象视为我的问题。

class MyClass {
   public:

   DWORD fun_32(_In_ DWORD64 a64bitparam); //wants DWORD64 returns DWORD
   DWORD64 fun_64(_In_ DWORD64 a64bitparam); //wants DWORD64 returns DWORD64

   DWORD64 fun(_In_ DWORD64 a64bitparam);

   private:
   BOOLEAN use64;
};


fun(DWORD64)实现:

DWORD64 MyClass::fun(DWORD64 a64bitparam) {

   std::function<DWORD64(DWORD64)> myReference;
   myReference = this->use64 ? &MyClass::fun_64 : &MyClass::fun_32;

}


该示例将不会编译为“操作数类型不兼容”。程序无法将DWORD强制转换为DWORD64

但是,这确实很丑。 (IMO)

std::function<DWORD64(DWORD64)> myReference;
myReference = [this](DWORD64 a) -> DWORD64 { return use64 ? fun_64(a) : fun_32(a);};


有人可以简要解释一下我在使用方法参考时做错了什么吗?

最佳答案

该示例将不会编译为“操作数类型不兼容”。程序无法以某种方式将DWORD转换为DWORD64。


不,那不是事实。

问题是您试图获取成员函数的地址,然后将其推入不希望指向成员函数指针的类型。

指向成员函数的指针很奇怪,因为调用它们时需要绑定this指针。在您的尝试中,调用myReference()(如果可能)将没有任何意义。将在哪个MyClass对象上调用它?

您最好使用lambda(如前所述),或者如果需要则使用std::bind

或者,考虑那些功能是否实际上需要对象状态。如果不是,则它们可以是static(然后就我们的目的而言,它们基本上与非成员函数相同)。

关于c++ - std::function方法引用无法将DWORD转换为DWORD64?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48791454/

10-15 06:09