yapar ederken şu örneği vardır:kullanma t (* this) sonuçları RuntimeError, t (std :: ref (* this) değil
#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;
}
Bu iyi çalışır, ancak başlangıçta ben Obj
yapıcısı vardı olarak:.
Obj() :
t(*this)
Ben üye işlevine yalnızca bir referans benim geri arama saklanır değil, nesne üzerinde üyesi çağırmak çünkü bu sanırım
ne. yapamaz std::ref
'un Obj() : t(std::ref(*this))
yapmamı ne anlama geldiğini ve bunun programın çalışmasını neden yaptığını anlaması. Birileri neler olup bittiğine biraz ışık tutabilir mi ve nasıl çalışır?
Hayır 'Obj(): t (* this)' iyi çalışıyor. 'Geriçağırım'' Obj’inizin de bulunduğu bir functor türüdür. –
@ Jean-BaptisteYunès Derleyicinin geçersiz kod oluşturduğunu mu söylüyorsunuz, çünkü Obj(): t (* this) 'çalışma zamanında çöküyor, ancak iyi çalışıyor mu? – binary01
G ++ std C++ 11 derleyicimde çalışıyor ve neden sizin için çalışmadığını göremiyorum. –