SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007