下面的代码段编译没有问题:的std ::绑定产生在的libstdc编译错误++
void dimse_pm::f()
{
ul.inject(upperlayer::TYPE::A_ASSOCIATE_RQ,
[=](upperlayer::scx* sc, std::unique_ptr<upperlayer::property> rq) {
associate(sc, std::move(rq));
}
);
}
然而,使用std ::绑定以下代码编译失败。
void dimse_pm::f()
{
using namespace std::placeholders;
ul.inject(upperlayer::TYPE::A_ASSOCIATE_RQ,
std::bind(&dimse_pm::associate, this, _1));
}
这是我的错误:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:1925:2: error: no matching function for call to object of type 'std::_Bind<std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >)> (dimse_pm *, std::_Placeholder<1>)>'
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:2298:33: note: in instantiation of member function 'std::_Function_handler<void (upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >), std::_Bind<std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property, std::default_delete<upperlayer::property> >)>
(dimse_pm *, std::_Placeholder<1>)> >::_M_invoke' requested here
_M_invoker = &_My_handler::_M_invoke;
^
dimse_pm.cpp:25:14: note: in instantiation of function template specialization 'std::function<void (upperlayer::scx *, std::unique_ptr<upperlayer::property, std::default_delete<upperlayer::property>
>)>::function<std::_Bind<std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property, std::default_delete<upperlayer::property> >)> (dimse_pm *, std::_Placeholder<1>)> >' requested here
std::bind(&dimse_pm::associate, this, _1));
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:1211:2: note: candidate template ignored: substitution failure [with _Args = <upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >>]: no matching function for call to object of type 'std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >)>'
operator()(_Args&&... __args)
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:1225:2: note: candidate template ignored: substitution failure [with _Args = <upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >>]: no matching function for call to object of type 'const std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >)>'
operator()(_Args&&... __args) const
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:1239:2: note: candidate template ignored: substitution failure [with _Args = <upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >>]: no matching function for call to object of type 'volatile std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >)>'
operator()(_Args&&... __args) volatile
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:1253:2: note: candidate template ignored: substitution failure [with _Args = <upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >>]: no matching function for call to object of type 'const volatile std::_Mem_fn<void (dimse_pm::*)(upperlayer::scx *, std::unique_ptr<upperlayer::property,
std::default_delete<upperlayer::property> >)>'
operator()(_Args&&... __args) const volatile
associate
是dimse_pm
而不是重载的成员函数。调用注入函数的对象ul
存储std::function<void(scx*, std::unique_ptr<property>)>
。我想摆脱这个指针。这个错误发生在clang 3.5和gcc 4.7.3上。
'associate'不是重载的,但是你用不同数量的参数调用它。你忘了'_2'吗? – Oktalist 2014-09-21 15:03:16
注入函数存储'ul'对象中的'std :: function)>''。所以我想摆脱这个隐含的指针。 –
2014-09-21 15:13:06