c – 如何将boost :: bind与C函数指针混合以实现回调
发布时间:2020-12-16 09:35:52 所属栏目:百科 来源:网络整理
导读:我试图在一些boost :: bind中替换成直接C函数指针样式回调的替换成员函数,但是我遇到了明显问题.有人能告诉我为什么以下代码片段似乎无法匹配函数调用中的类型? #include iostream#include boost/bind.hppusing namespace std;class Foo {public: Foo(const
|
我试图在一些boost :: bind中替换成直接C函数指针样式回调的替换成员函数,但是我遇到了明显问题.有人能告诉我为什么以下代码片段似乎无法匹配函数调用中的类型?
#include <iostream>
#include <boost/bind.hpp>
using namespace std;
class Foo {
public:
Foo(const string &prefix) : prefix_(prefix) {}
void bar(const string &message)
{
cout << prefix_ << message << endl;
}
private:
const string &prefix_;
};
static void
runit(void (*torun)(const string &message),const string &message)
{
torun(message);
}
int
main(int argc,const char *argv[])
{
Foo foo("Hello ");
runit(boost::bind<void>(&Foo::bar,boost::ref(foo),_1),"World!");
}
解决方法
bind的结果类型不是函数指针,它是一个函数对象,它不会被隐式转换为函数指针.使用模板:
template<typename ToRunT>
void runit(ToRunT const& torun,std::string const& message)
{
torun(message);
}
或者使用 static void runit(boost::function<void(std::string const&)> const& torun,std::string const& message)
{
torun(message);
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
