我无法引用我的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);};
有人可以简单地向我解释一下我对方法参考的错误吗?
答案 0 :(得分:6)
该示例不会编译为&#39;操作数类型不兼容&#39;。不知何故,该程序无法将DWORD转换为DWORD64。
不,这不是正在发生的事情。
问题是你正在尝试获取成员函数的地址,然后将其推入一个不期望指向成员函数的类型。
指针到成员函数是奇怪的野兽,因为在调用它们时需要绑定this
指针。在你的尝试中,调用myReference()
(如果可能的话)没有任何意义。将调用哪个MyClass
对象?
你最好使用lambda(正如你已经展示的那样),或者std::bind
如果必须的话。
或者,考虑这些函数是否实际需要对象状态;如果没有,它们可以是static
(然后它们基本上与非成员函数相同,为了我们的目的)。