boost::bind
-
hi,
es geht um boost::bind bei member funktionen. habe bisher so gut wie alles ausprobiert, wird aber nix.
sprich:std::for_each(stringVec.begin, stringVec.end, boost::bind(&Klasse::Show, _1); ... void Klasse::Show(std::string var) { ... }(so in etwa)
er zeigt mir immer sachen an wie:
see reference to class template instantiation 'boost::_bi::add_cref<Pm,I>' being compiledkann mich mal einer aufklären? ahja, die boost doku habe ich auch gelesen, werde aber nicht schlau aus dem dort gezeigtem code.
danke an alle
-
was ist mit dem zweiten Parameter?
-
camper schrieb:
was ist mit dem zweiten Parameter?
wie!?

-
Du musst auch sagen welches Object der Klasse Klasse.
Klasse kl; std::vector<std::string> stringVec; stringVec.push_back("aaa"); stringVec.push_back("vvv"); std::for_each(stringVec.begin(), stringVec.end(), boost::bind(&Klasse::Show, kl, _1));
-
boost0r schrieb:
std::for_each(stringVec.begin, stringVec.end, boost::bind(&Klasse::Show, _1); ... void Klasse::Show(std::string var) { ... }Show ist eine nicht-statische Elementfunktion, die einem Parameter bekommt. Um so eine Funktion allerdings aufrufen zu können, brauchst man auch das entsprechende
Klasse-Objekt dafür. Der bind-Aufruf muss daher 3 Parameter bekommen: den Elementfunktionszeiger, einen Objekt-Zeiger/Referenz (oder Platzhalter dafür) und einen String-Parameter (oder Platzhalter dafür).Gruß,
SP
-
wenn ich es so mache wie von pupsboost gezeigt, dann kommt:
Unhandled exception at 0x00312d59 in test.exe: 0xC00000FD: Stack overflow.
und zeigt mir folgende zeile aus der xutility an:
{ // cut ties with parent if (_Mycont != 0 && _Mycont->_Myfirstiter != _IGNORE_MYITERLIST)danke schonmal
-
*push*
-
class Klasse{ public: void Klasse::Show(std::string const & var) { std::cout<<var<<std::endl; } }; int main() { Klasse kl; std::vector<std::string> stringVec; stringVec.push_back("aaa"); stringVec.push_back("vvv"); std::for_each(stringVec.begin(), stringVec.end(), boost::bind(&Klasse::Show, kl, _1)); }Geht ohne Probleme