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 compiled
    

    kann 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


  • Mod

    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


Anmelden zum Antworten