2011-08-30 23 views
7
void ff(int){} 

void Unscribe(const boost::function<void(int)>& f) 
{ 
    std::map<int, boost::function<void(int)> > map; 

    map[0] = ff; 

    if(map[0] == f) 
    { 

    } 
} 

Unscribe(ff); 

İki destek işleviyle aynı imza ile karşılaştırma yapabilmek istiyorum. Bu kodu derlenebilir hale getirmek için ne değiştirmeliydim?iki destekle karşılaştırın :: işlev

+1

bakınız [Neden std :: işlev değil eşitlik karşılaştırılabilir?] (Http://stackoverflow.com/q/3629835: onun ikincisi ise, boost/function_equal.hpp tarafından sağlanan arayüz kullanabilirsiniz/20984) –

cevap

14

Yapamazsınız. boost function FAQ ilk girişini okuyun:

  1. Neden boost karşılaştıramazsınız :: fonksiyon operatörü == veya operatör ile nesneleri =!?

Boost :: function nesneleri arasındaki karşılaştırmalar "well" uygulanamaz ve bu nedenle uygulanmayacaktır. ...

+0

neden bu iyi uygulanamaz? – Guillaume07

+3

@ Guillaume07: SSS girişinin geri kalanı için bir bağlantı gönderdiğini açıklıyor. –

-1

İmzaları karşılaştırmak mı arıyorsunuz, yoksa functor eşitliği mi (bu iki funktör aynı temel bellek adresine işaret ediyor)?

Boost Function Equal

template<typename F, typename G> bool function_equal(const F& f, const G& g); 
+2

cevabının tüm cevabını kopyalayıp yapıştırmanın daha iyi olacağını düşündüm Yanlış cevap, 'function_equal' fonksiyon * sarmalayıcıların * (' boost :: function') fonksiyon * nesnelerinin * (functor ya da function pointer) ile karşılaştırılmasına izin vermek için kullanışlıdır) (Bkz. [Boost.Function işlev nesnelerinin karşılaştırılması] (http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1362038)). İki işlevli sarmalayıcı karşılaştırması mümkün değildir. (Belgelerin bu konuda çok net olmadığını itiraf ediyorum.) –

+0

İstediğim bu. –

İlgili konular