2012-09-02 17 views
5

Bence bunun cevabı hayır, ama emin olmak istiyorum.Std :: 's ve boost ::' s :: bind ve :: function nedenlerini karıştırabilir mi?

Bir işlevde parametre olarak bir std::function varsa, bir boost::bind geçişi ile ilgili herhangi bir sorun var mı?

düzenleme:

Sana artırmak \ bind.h eklediğinizde boost :: bağlama kullandığı tutucuları ad doğrudan ithal ve bunlar std :: bağlama ile uyumsuz olduğunu keşfetti. Std :: bind için, yer tutuculara açık bir şekilde başvurmalısınız, örneğin: std :: placeholders :: _ 1, ya da başka bir typedef yapın ya da her ikisini de aynı anda kullanılabilir hale getirmek için sihir kullanın.

+0

Yuvalanmış bir bağlama ifadesinin ne olduğunun farkında olmak ve farklı kitaplıkların bu bağlamda nasıl etkileşimde bulunduğunu kontrol etmek isteyebilirsiniz. –

cevap

10

sayılı std:: (ve boost::) bütün amacı function bunlar lambda, funktorlar dahil olmak üzere doğru İmza ile çağrılabilir herhangi işlev nesnesini bağlanabilen herhangi bir sonucu kabul edilebilir olmasıdır. İşlev nesnesinin nereden geldiğini veya ne tür olduğunu umursamıyorlar.

Bunları birbirinize bağlayabilirsiniz, ancak neden istediğinizden emin değilim.

+1

Benim için bunu doğruladığınız için teşekkür ederiz. Bu desteğin yer tutucularını std :: bind'in yer tutucularıyla çakışan ad alanına aktardığını keşfettim, bu nedenle std'nin yer tutucularını std :: placeholders :: _ 1 kullanarak açıkça belirtmelisiniz – cwm9

İlgili konular