使用 boost::bind 和 __fastcall

Using boost::bind with __fastcall

我有一个函数void __fastcall ClassName::FunctionName()

我想创建一个指向该函数的提升函数,使用 boost::bind。这可能吗?写 boost::bind(&ClassName::FunctionName, this) 给出编译错误 "member function must be called or its address taken".

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

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

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

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

在此之后,boost::bind 语法按预期运行。

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