2010-11-22 15 views
5

Ich hatte die folgende Codezeile, die unter g gerade fein kompiliert ++ und Visual Studio vor 2010.Gibt es boost :: bind Probleme mit VS2010?

std::vector<Device> device_list; 

boost::function<void (Device&, boost::posix_time::time_duration&)> callback = 
    boost::bind(&std::vector<Device>::push_back, &device_list, _1); 

Wo Device eine Klasse ist, nichts Besonderes.

Nun meine Visual Studio Version, die ich bis 2010 nur ein Upgrade und Zusammenstellung nicht mit:

Error 1 error C2780: 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type> boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided C:\developments\libsystools\trunk\src\upnp_control_point.cpp 95 

Was los ist und wie kann ich dieses Problem lösen?

Danke.

+0

welche Version von Boost? –

+0

@ Sam Miller: 1.44. – ereOn

Antwort

10

Dies ist wahrscheinlich, weil vector::push_back jetzt 2 Überladungen durch Unterstützung oder C++ 0x Funktionen hat, so dass die bind mehrdeutig.

void push_back(
    const Type&_Val 
); 
void push_back(
    Type&&_Val 
); 

Dies sollte funktionieren, oder verwenden Sie die eingebaute Funktion vorgeschlagen in @ Antwort DeadMG suchen:

std::vector<Device> device_list; 

boost::function<void (Device&, boost::posix_time::time_duration&)> callback = 
    boost::bind(static_cast<void (std::vector<Device>::*)(const Device&)> 
    (&std::vector<Device>::push_back), &device_list, _1); 
+1

+1. Danke für die Erklärung und die Lösung. Ich hätte nie gedacht, einen Funktionszeiger statisch zu werfen;) – ereOn

4

Es gibt Probleme mit in MSVC10 verbindlich. Dies ist nicht der erste Beitrag, bei dem ich Probleme gemeldet habe. Zweitens ist es vollständig und völlig überflüssig mit der Einführung von Lambda, und boost :: function wurde durch std :: function ersetzt.

Es ist nicht notwendig, in MSVC10 zu binden.

+0

Das ist besser für C++ 0x –

+0

btw 'boost :: bind' mit mehrdeutigen Elementfunktion Überladungen ist nicht nur problematisch in Visual C++ und +1 für elegante Alternative –

+0

Es gibt viele Gründe, die Bindung in C++ 0x zu verwenden. –

Verwandte Themen