20 ŞUBAT 2010, CUMARTESİ
Nasıl üye işlevi ile bağlama boost kullanmak için
Aşağıdaki kodu çökmesine cl.exe (MS VS2005) neden olur.
Bağlama aramalar sınıfım için bir yöntem için bir işlevi oluşturmak için destek kullanmaya çalışıyorum:
#include "stdafx.h"
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <functional>
class myclass {
public:
void fun1() { printf("fun1()\n"); }
void fun2(int i) { printf("fun2(%d)\n", i); }
void testit() {
boost::function<void ()> f1( boost::bind( &myclass::fun1, this ) );
boost::function<void (int)> f2( boost::bind( &myclass::fun2, this ) ); //fails
f1();
f2(111);
}
};
int main(int argc, char* argv[]) {
myclass mc;
mc.testit();
return 0;
}
Neyi yanlış yapıyorum?
CEVAP
20 ŞUBAT 2010, CUMARTESİ
Aşağıdaki kullanın:
boost::function<void (int)> f2( boost::bind( &myclass::fun2, this, _1 ) );
Bu ileten ilk parametre işleve fonksiyonu için yer tutucular kullanarak nesne söylemelisinBoost.Bağlamanasıl parametreleri işlemek için. Senin ifade ile bir üye işlev argüman alacak şekilde yorumlamak için denemek istiyorsunuz.
Ortak kullanım alışkanlıkları, örneğin here here bkz.
VC8s cl.exe düzenli olarak çöküyor unutmayınBoost.Bağlamaşüphe kullanımda eğer kötüye - bir-örnek test gcc ile ve muhtemelen şablon parametreleri gibi iyi ipuçları elde edeceksinizBağlama-iç çıktı okursanız örneği alındı.
Bunu Paylaş:
Nasıl kendi işlevi yazarken'In R ...
Nasıl bir WordPress kullanmak bir işle...
(Ya da ihmal) kullanmak için zaman var...
Nasıl HTML Çeviklik paketi kullanmak i...
Nasıl derleme bağlama hatası günlük (F...