我在引用我的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。
不过,这个确实是,但看起来很丑。(海事组织)
std::function<DWORD64(DWORD64)> myReference;
myReference = [this](DWORD64 a) -> DWORD64 { return use64 ? fun_64(a) : fun_32(a);};有人能简单地解释一下我在方法参考中做错了什么吗?
发布于 2018-02-14 16:13:10
该示例不会编译,因为‘操作数类型不兼容’。不知何故,该程序无法将DWORD转换为DWORD64。
不,事情不是这样的。
问题是,您正在尝试获取成员函数的地址,然后将其推入一种不需要指针到成员函数的类型中。
指针到成员函数是奇怪的东西,因为在调用它们时需要绑定一个this指针。在您的尝试中,调用myReference() (如果可能的话)没有任何意义。会在哪个MyClass对象上调用它?
如果需要的话,最好使用lambda (如您已经展示过的)或std::bind。
或者,考虑这些函数是否实际需要对象状态;如果不是,它们可以是static (就我们这里的目的而言,它们基本上与非成员函数相同)。
https://stackoverflow.com/questions/48791454
复制相似问题