我在引用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/