Genel std::kullanarak bir sınıfın üye fonksiyonları ile fonksiyon nesneleri
Bir sınıf için bir map
std::function
nesneleri saklamak aynı sınıfın üye fonksiyonları için bazı işlev işaretçileri saklamak istiyorum. Ama bu kod ile ilk sırada ben başarısız:
class Foo {
public:
void doSomething() {}
void bindFunction() {
// ERROR
std::function<void(void)> f = &Foo::doSomething;
}
};
xxcallobj
error C2064: term does not evaluate to a function taking 0 arguments
garip bir şablon örnekleme hataları ile birlikte alıyorum. Şu anda Visual Studio 2010/2011 ile Windows 8 üzerinde çalışıyorum ve VS10 ile Win 7 de başarısız olur. Hata takip etmem biraz garip C kurallara dayalı olmalıdır.
EDİT: ben biliyorumDEĞİLboost kullanın. Bu MS derleyici C 11 entegre edilmiştir.
CEVAP
Statik olmayan üye işlev bir nesne ile çağrılmalıdır. O, her zaman "bu" argüman olarak bir işaretçi. örtülü olarak geçer.
std::function
imza fonksiyon herhangi bir parametre (**10) almaz belirtir çünkü, gerekirbağlama(ve sadece) ilk argümanı.
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Eğer parametreleri ile bir fonksiyonu bağlamak istiyorsanız, tutucular belirtmeniz gerekir:
using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Ya da, eğer derleyici destekliyorsa C 11 Lambda:
std::function<void(int,int)> f = [=](int a, int b) {
this->doSomethingArgs(a, b);
}
(Eldeki C 11 uyumlu bir derleyici yokşu andabunu kontrol edemiyorum.)
Anonim fonksiyonları Javascript dosyal...
Nasıl C fonksiyonları nesneleri geçirm...
Python: sınıf baskı kullanarak bir sın...
Güncelleme tüm nesneleri bir koleksiyo...
JSON nesneleri Jackson kullanarak görm...