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

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • Peyton

    Peyton

    28 Aralık 2008
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011