gpt4 book ai didi

C++ (C3867) 将成员函数传递给函数调用

转载 作者:行者123 更新时间:2023-11-30 00:42:04 25 4
gpt4 key购买 nike

我正在尝试将成员函数作为参数传递。基本上我有一个名为 AboutWindow 的类,标题看起来像这样(为简洁起见进行了修剪):

class AboutWindow
{
private:
AboutWindow(void);
~AboutWindow(void);

public:
int AboutWindowCallback(XPWidgetMessage inMessage, XPWidgetID inWidget, long inParam1, long inParam2);
};

在源代码中,我试图将 AboutWindowCallback 成员函数作为函数(指向/引用)传递。

看起来像这样:

XPAddWidgetCallback(widgetId, this->AboutWindowCallback);

但我收到以下 IntelliSense 警告:

A pointer to a bound function may only be used to call the function

是否可以将成员函数传递给 XPAddWidgetCallback。请注意,它必须是特定实例的特定函数,因为在 AboutWindowCallback 函数内部,使用了 this 关键字。

提前致谢!

最佳答案

我假设您在这里使用的是 x 平面。

不幸的是,XPAddWidgetCallback 期望回调的形式为

int callback(XPWidgetMessage inMessage, XPWidgetID inWidget, 
long inParam1, long inParam2)

您提供了一个类成员函数。如果这是一个全局函数,它就会起作用。所以这个:

class AboutWindow
{
private:
AboutWindow(void);
~AboutWindow(void);
};

int AboutWindowCallback(XPWidgetMessage inMessage, XPWidgetID inWidget,
long inParam1, long inParam2);

会是正确的。

但是,为此必须具有全局函数并不好,因为 noted in this thread在 x 平面上。

要避免这种情况,请查看随 x-plane 提供的 Wrapper 类示例“XPCWidget.cpp”,或使用 tr1/boost bind包装回调。

XPAddWidgetCallback( std::tr1::bind( &AboutWindow::AboutWindowCallback, this ) );

您还可以使有问题的函数静态:

class AboutWindow
{
private:
AboutWindow(void);
~AboutWindow(void);
static int AboutWindowCallback(XPWidgetMessage inMessage, XPWidgetID inWidget,
long inParam1, long inParam2);
};

关于C++ (C3867) 将成员函数传递给函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1995744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com