2

我有一个小问题,我不知道如何解决(很遗憾)。

我想编译一个 Awesomium 1.7RC2 SDK 的示例项目,它在 vs10 上运行良好,但在 vs11 上我确实遇到了一些错误。

这些是错误:

http://pastebin.com/6RdUffve

它们是由这些代码行引起的:

method_dispatcher_.Bind(app_object,
WSLit("SayHello"),
&Application::OnSayHello);
method_dispatcher_.Bind(app_object,
WSLit("Exit"),
&Application::OnExit);

method_dispatcher_.BindWithRetval(app_object,
WSLit("GetSecretMessage"),
&Application::OnGetSecretMessage);

调度程序类的代码:

标题: http: //pastebin.com/ktTEuQ4T

来源: http: //pastebin.com/FTDHQzJ9

我希望有一个人可以帮助我 :)

4

1 回答 1

1

这似乎是由 VS2012 中的一个错误引起的,其中 std::function 没有将成员函数指针隐式转换为函数指针。这个例子应该根据 Bjarne Stroustroups C++11 FAQ 工作,在我的 VS2012 中抛出同样的错误:

struct X {
    int foo(int);
};

function<int (X*, int)> f;
f = &X::foo;        // pointer to member

X x;
int v = f(&x, 5);   // call X::foo() for x with 5

您可以通过创建静态函数来解决这个问题

void StaticOnSayHello(Application* app, Awesomium::WebView* caller, const Awesomium::JSArray &args) {
    app->OnSayHello(caller, args);
}

等等,并将它们作为第三个参数提供给 method_dispatcher::Bind。

于 2012-09-11T16:20:11.810 回答