使用 boost::bind 和 boost::function 时出现问题
Trouble with using boost::bind & boost::function
此问题的后续内容
如何将类成员函数传递给第三方库中的方法?
快速回顾一下,我需要将指向函数的指针传递给第三方库中名为moveset的类的构造函数,该库具有的定义
template <class Space>
moveset<Space>::moveset(particle<Space> (*pfInit)(rng*),
void (*pfNewMoves)(long, particle<Space> &,rng*),
int (*pfNewMCMC)(long,particle<Space> &,rng*))
该库提供的示例是简单地定义pfInit等的全局函数,让我们调用它们f、g和h。然后从控制器类中调用smc::moveset moveset(f、g、h);
我尝试使用boost:bind来实现该建议。不幸的是,我正在努力让它发挥作用。
class IK_PFWrapper
{
public:
IK_PFWrapper(Skeleton* skeleton, PFSettings* pfSettings) ;
smc::particle<cv_state> fInitialise(smc::rng *pRng);
...
} ;
在控制器类中
IK_PFWrapper testWrapper (skeleton_,pfSettings_);
boost::function<smc::particle<cv_state> (smc::rng *)> f = boost::bind(&IK_PFWrapper::fInitialise, &testWrapper,_1) ;
// the 2nd and 3rd argument will be eventually be defined in the same manner as the 1st
smc::moveset<cv_state> Moveset(f, NULL, NULL);
由此产生的编译器错误为,
AlgorithmsIK_PFController.cpp(88): error C2664: 'smc::moveset<Space>::moveset(smc::particle<Space> (__cdecl *)(smc::rng *),void (__cdecl *)(long,smc::particle<Space> &,smc::rng *),int (__cdecl *)(long,smc::particle<Space> &,smc::rng *))' : cannot convert parameter 1 from 'boost::function<Signature>' to 'smc::particle<Space> (__cdecl *)(smc::rng *)'
with
[
Space=cv_state
]
and
[
Signature=smc::particle<cv_state> (smc::rng *)
]
and
[
Space=cv_state
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
任何帮助都非常感谢
boost::function
(使用boost::bind
创建的)不会自动转换为普通的旧函数指针。
我建议创建一个使用boost::function
的包装器接口,即您的示例(简化为一个参数)看起来像:
template <class Space>
moveset<Space>::moveset(boost::function<particle<Space> (rng*)> pfInit)
{
library_namespace::moveset<Space>(
pfInit.target<particle<Space>(rng*)>() // parameter 1
);
}
创建包装器意味着您只需要在一个地方处理原始函数指针。希望这能有所帮助,并对代码片段中的任何错误表示歉意!
相关文章:
- 基于boost的程序的静态链接——zlib问题
- C++boost序列化多态性问题
- 在 boost::variant 中类 holden 的复制构造函数存在问题
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 将 Boost 与 CMAKE 联系起来时出现问题
- boost Logger出现问题
- 在 Windows 10 上安装 Boost 时遇到问题
- 链接问题 boost::p ython::numpy.
- 递归 Boost.Spirit 解析的问题
- 在C++中读取文件系统时出现问题(Boost 未编译)
- 使用 boost::序列化将派生类指针序列化为向量时出现问题
- 获取“boost::文件系统::p ath”字符指针时出现问题
- Xcode(版本9.2(9C40B)):试图包括Boost时C 语义和链接器问题
- 与 boost.python 和 python3 链接时出现问题
- PCL 构建存在 boost::throw_exception 问题
- 链接boost.python示例的问题
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 在Windows 10中的Boost :: FileSystem :: remove_all遇到问题
- Boost-beast websocket握手问题
- 在 gcc 中使用 fsanitize 开关的 Boost 出现问题