Boost kaynak kodunu gözden geçirmek için uzun bir süre harcamadan, bir kişi bana bağlantı desteğinin nasıl uygulandığına dair hızlı bir açıklama verebilir mi?Destek, genel olarak sahnelerin arkasına nasıl bağlanır?
cevap
Ben bind
kaynağının bu parça gibi.
bind_template
başlığı, satır içi operator()
tanımları listesine genişler. Örneğin, en basit: satır daha return l_(type...)
gibi yani
result_type operator()()
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
Biz bu noktada return
için BOOST_BIND_RETURN
makro Genişlediğinde görebilirsiniz.
bir parametre versiyonu
buradadır:template<class A1> result_type operator()(A1 & a1)
{
list1<A1 &> a(a1);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
Oldukça benzer.
listN
sınıfları, parametre listeleri için paketleyicidir. Burada çok fazla derin bir sihirbazlık var, aslında çok fazla anlamadım. Onlar da gizemli unwrap
işlevini çağıran operator()
aşırı yüklü. Bazı derleyici özgü aşırı gözardı ederek, bir sürü yapmaz:
// unwrap
template<class F> inline F & unwrap(F * f, long)
{
return *f;
}
template<class F> inline F & unwrap(reference_wrapper<F> * f, int)
{
return f->get();
}
template<class F> inline F & unwrap(reference_wrapper<F> const * f, int)
{
return f->get();
}
adlandırma kuralı gibi görünüyor: F
bind
işlev parametresinin türüdür. R
dönüş türüdür. L
, parametre türlerinin bir listesi olma eğilimindedir. Çok sayıda komplikasyon da var çünkü farklı sayıda parametre için en az dokuz aşırı yüklenme var. Bu konuda fazla durmamak için en iyisi. bind_t
boost/bind/bind_template.hpp
dahil ederek çöktü ve basitleştirilmiş eğer arada
Sanırım bu, argümanların geri kalanı için bağlamak istediğiniz argümanlar için bir üye değişkeni olduğunu bildiren bir şablon sınıfıdır.
template<class R, class F, class L> class bind_t
{
public:
typedef bind_t this_type;
bind_t(F f, L const & l): f_(f), l_(l) {}
#define BOOST_BIND_RETURN return
#include <boost/bind/bind_template.hpp>
#undef BOOST_BIND_RETURN
};
neredeyse bilmeniz gereken tüm gerçekten anlatır:
, gibi anlamak daha kolay hale gelir şu:
template<class R, class F, class L>
class bind_t
{
public:
typedef bind_t this_type;
bind_t(F f, L const & l): f_(f), l_(l) {}
typedef typename result_traits<R, F>::type result_type;
...
template<class A1>
result_type operator()(A1 & a1)
{
list1<A1 &> a(a1);
return l_(type<result_type>(), f_, a, 0);
}
private:
F f_;
L l_;
};
- 1. Sahnelerin arkasında Erlang süreçleri nelerdir?
- 2. Paylaşılan kitaplığın bağımlılıkları otomatik olarak nasıl bağlanır
- 3. Birisi sahnelerin ardında neler olduğunu açıklayabilir mi?
- 4. JDeveloper12c'den SVN Nasıl Bağlanır/Yeniden Bağlanır?
- 5. Yorum bırakanlar metin arkasına dön
- 6. Yineleyici türüne nasıl bağlanır? Öğe?
- 7. Tarantool'den mysql'ye nasıl bağlanır?
- 8. RibbonComboBox'ın SelectedItem'ine nasıl bağlanır?
- 9. libstdC++ ile statik olarak clang ++ bağlanır.
- 10. Django:() Genel olarak
- 11. AWS Elasticsearch'a nasıl bağlanır?
- 12. Node.js - Akışa nasıl bağlanır
- 13. Node.js'den nethack'e nasıl bağlanır?
- 14. AngularJS'de jsReport'a nasıl bağlanır?
- 15. Destek fasulyesinin bir Facelet'e parametre olarak geçirilmesi
- 16. Genel olarak geçerli HttpRequestMessage nesnesine nasıl erişilir?
- 17. Android: Nasıl kilitleme genel olarak (donanım klavyesinde)
- 18. ECMAScript nasıl etkinleştirilir "genel olarak" kullanın?
- 19. Başka bir UILabel (Swift) arkasına UILabel gönder (
- 20. Neden Run.Text varsayılan olarak iki yönlü bağlanır?
- 21. wpf DataContext varlığına nasıl bağlanır?
- 22. Mercurial: Dosyaları Genel Olarak Yoksay
- 23. Twitter, Twitter'da "Destek URL'si" olarak Kullanılabilir
- 24. ENUM'a radyo düğmesi nasıl bağlanır?
- 25. Belirtilen SSID ile bir WiFi otomatik olarak nasıl bağlanır?
- 26. Flexlm lisans yöneticisine nasıl bağlanır?
- 27. Visual Studio 2012 Kısayol tuşları Aspx'ten Kodun Arkasına ve Kodun arkasına aspx
- 28. Polyml yorumlayıcıya nasıl destek eklenir?
- 29. Bu destek için bir destek :: shared_ptr alma
bu neden '# beni ... basit görünmüyor BOOST_BIND_RETURN dönüşü gerekli mi? neden sadece geri dönmüyor? – Ha11owed
Hala anlamadım. Oluşturucuyu “bind_t” olarak adlandırır mısınız? – ThomasMcLeod
@ Ha11owed bu nedenle, dönüş değerini olmayan şablonlar için üstbilgiyi kullanabilirler! –