首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能方法引用无法将DWORD转换为DWORD64?

功能方法引用无法将DWORD转换为DWORD64?
EN

Stack Overflow用户
提问于 2018-02-14 16:05:30
回答 1查看 130关注 0票数 0

我在引用我的MyClass类的成员函数时遇到了问题。请把这个抽象看作是我的问题。

代码语言:javascript
复制
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)实现:

代码语言:javascript
复制
DWORD64 MyClass::fun(DWORD64 a64bitparam) {

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

}

该示例不会编译,因为‘操作数类型不兼容’。不知何故,该程序无法将DWORD转换为DWORD64

不过,这个确实是,但看起来很丑。(海事组织)

代码语言:javascript
复制
std::function<DWORD64(DWORD64)> myReference;
myReference = [this](DWORD64 a) -> DWORD64 { return use64 ? fun_64(a) : fun_32(a);};

有人能简单地解释一下我在方法参考中做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-14 16:13:10

该示例不会编译,因为‘操作数类型不兼容’。不知何故,该程序无法将DWORD转换为DWORD64。

不,事情不是这样的。

问题是,您正在尝试获取成员函数的地址,然后将其推入一种不需要指针到成员函数的类型中。

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

如果需要的话,最好使用lambda (如您已经展示过的)或std::bind

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48791454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档