glf*_*f4k 0 c++ winapi functional-programming
我无法引用我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;
};
Run Code Online (Sandbox Code Playgroud)
一个fun(DWORD64)实现:
DWORD64 MyClass::fun(DWORD64 a64bitparam) {
std::function<DWORD64(DWORD64)> myReference;
myReference = this->use64 ? &MyClass::fun_64 : &MyClass::fun_32;
}
Run Code Online (Sandbox Code Playgroud)
该示例将不会编译为"操作数类型不兼容".某种程度上该程序无法投射DWORD到DWORD64.
但是,这个确实如此,但看起来很难看.(IMO)
std::function<DWORD64(DWORD64)> myReference;
myReference = [this](DWORD64 a) -> DWORD64 { return use64 ? fun_64(a) : fun_32(a);};
Run Code Online (Sandbox Code Playgroud)
有人可以简单地解释一下我在方法参考中做错了什么吗?
该示例将不会编译为"操作数类型不兼容".不知何故,该程序无法将DWORD转换为DWORD64.
不,这不是正在发生的事情.
问题是您正在尝试获取成员函数的地址,然后将其推送到不期望指向成员函数的指针的类型中.
由于需要this在调用指针时绑定指针,因此指针到成员函数是奇怪的动物.在你的尝试中,调用myReference()(如果可能的话)没有任何意义.MyClass它会被调用哪个对象?
你最好使用lambda(正如你已经展示过的那样),或者std::bind你必须这样做.
或者,考虑这些函数是否实际需要对象状态; 如果没有,它们可能是static(然后它们基本上与非成员函数相同,为此我们的目的).