2

我有一个功能void __fastcall ClassName::FunctionName()

我想使用 boost::bind 创建一个指向该函数的 boost 函数。这可能吗?写作boost::bind(&ClassName::FunctionName, this)给出编译错误“必须调用成员函数或其地址”

一种可能的解决方法是创建一个包装函数,但这是不可取的,因为它会创建无用的额外代码:

void ClassName::FunctionName2(){
    FunctionName();
}
...
boost::bind(&ClassName::FunctionName2, this);
4

1 回答 1

4

这可以通过启用对__fastcall宏的支持来解决:

#define BOOST_MEM_FN_ENABLE_FASTCALL
#include <boost/bind.hpp>

在此之后, boost::bind 语法按预期工作。

这是一个不可移植的扩展,因此默认情况下未启用。Boost::bind 文档

于 2016-02-23T08:05:10.127 回答