んがトン(* this)を使用すると、例外RuntimeErrorを結果:トン(STD :: refを(*これは)私は、次の例ではありませ
#include <iostream>
#include <functional>
struct Tmr {
typedef std::function<void(void)> Callback;
Callback cb;
Tmr(Callback cb_) :
cb(cb_)
{
}
void timeout()
{
cb();
}
};
struct Obj {
struct Tmr t;
Obj() :
t(std::ref(*this))
{
}
void operator()()
{
std::cout << __func__ << '\n';
}
};
int main(int argc, char *argv[])
{
Obj o;
o.t.timeout();
return 0;
}
をこれは細かい動作しますが、最初に私はObj
のコンストラクタを持っていました。私は、メンバ関数への参照のみが上のメンバーを呼び出すためのオブジェクト私のコールバックに保存されている、とされていないため、
何これは推測
ランタイムエラーになりObj() :
t(*this)
:として。しない私がObj() : t(std::ref(*this))
を実行したときにstd::ref
が何をするのか理解しており、なぜこれがプログラムを動作させるのでしょうか。誰が何が起こっているのか、それがどのように機能するかについて、何か光を当てることができますか?
いいえObj():t(* this) 'はうまくいきます。あなたの 'Callback'は関数型で、' Obj'もそうです。 –
@ Jean-BaptisteYunèsObj():t(* this)が実行時にクラッシュするので、コンパイラが無効なコードを生成していると言っていますか? – binary01
これは私のg ++ std C++ 11コンパイラで動作し、なぜあなたのためにうまくいかないのか分かりません。 –