作業(..)メンバーをラップするためのstd ::関数を作成したいとき、コンパイルエラーが発生しました。std :: bindをstd :: bindで使用する:コンパイルエラー(暗黙のキャスト)
サンプルコード:
class C{
public:
C(){
std::function<void(void) > f = std::bind(&C::work,
this,
std::bind(&C::step1, this),
std::bind(&C::step2, this));
QList<decltype(f)> lst;
lst.append(f);
.....
}
private:
void work(std::function<bool()> fn1, std::function<bool()> fn2) {
if (fn1()) {
QTimer::singleShot(1, fn2);
}
else {
QTimer::singleShot(5, fn1);
}
}
bool step1(){return true;}
bool step2(){return true;}
};
コンパイルエラー:事前 /requinhamで
main.cpp:49: erreur : conversion from 'std::_Bind_helper<false, void (C::*)(std::function<bool()>, std::function<bool()>), C* const, std::_Bind<std::_Mem_fn<bool (C::*)()>(C*)>, std::_Bind<std::_Mem_fn<bool (C::*)()>(C*)> >::type {aka std::_Bind<std::_Mem_fn<void (C::*)(std::function<bool()>, std::function<bool()>)>(C*, std::_Bind<std::_Mem_fn<bool (C::*)()>(C*)>, std::_Bind<std::_Mem_fn<bool (C::*)()>(C*)>)>}' to non-scalar type 'std::function<void()>' requested
std::bind(&C::step2, this));
^
おかげ
バインドは魔法です。期待通りに機能しません。 –
バインドの代わりにlambdasを使用します。 – Yakk
あなたのコンパイラのエラーステートメントは、 'bind'は暗黙の変換を行わず、' bind(&C :: step、this) 'の結果は' _Bind_helper' *ではなく 'function'です。 'bind(&C :: step2、this)));あなたは変換を自分で行う必要があります:' bind(&C :: work2、this、function (bind(&C :: step1、this))、function ](http://ideone.com/lvVL5z) –