下面的代碼段編譯沒有問題:的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