boost::function portable-syntax



  • Kann mir bitte erklären wie die 'portable-syntax' funktioniert?
    Denn das hier:

    #include <boost/function.hpp> 
    #include <iostream> 
    
    struct world 
    { 
      void hello(void) 
      { 
        std::cout << "Hello, Boost!" << std::endl; 
      } 
    }; 
    
    int main() 
    { 
      boost::function<void, world*> f = &world::hello; 
      world w; 
      f(&w); 
    }
    

    Ergibt das hier:

    In Funktion »int main()«:
    Fehler: falsche Anzahl der Templateargumente (2, sollte 1 sein)
    Fehler: für »template<class Signature> struct boost::function« bereitgestellt
    Fehler: invalid type in declaration before »=« token
    Fehler: »void (world::*)()« kann nicht nach »int« in initialization umgewandelt werden
    Fehler: »f« kann nicht als Funktion verwendet werden
    


  • struct world
    {
      void hello(void)
      {
        std::cout << "Hello, Boost!" << std::endl;
      }
    };
    
    int main()
    {
      boost::function1<void, world*> f = &world::hello;
      world w;
      f(&w);
    }
    

    Schau genau, ich hab 1 geändert.



  • wtf, steht auch in der docu von boost >.>

    habs übersehen... ein "_1" wäre viel übersichtlicher. danke!



  • aber wo steht bitte was die '1, 2,...' bedeuten?
    es funktioniert zwar, aber schlauer bin ich nicht gerade geworden.



  • functionary schrieb:

    aber wo steht bitte was die '1, 2,...' bedeuten?

    Die Zahl der Funktionsparameter vielleicht?



  • krümelkacker schrieb:

    functionary schrieb:

    aber wo steht bitte was die '1, 2,...' bedeuten?

    Die Zahl der Funktionsparameter vielleicht?

    mist. ich wollte etwas mit variadic-templates und boost::function machen damit ich eine variable anzahl von argumenten an boost::function<T, T, Y, X....> übergeben kann. Möglich oder bietet boost schon was ähnliches an?



  • functionary schrieb:

    Möglich oder bietet boost schon was ähnliches an?

    Mit std::function aus dem functional-Header sollte das gehen. Du bist ja mit variadischen Templates sowieso auf C++0x angewiesen und in C++0x gibt es std::function, welches selbst mit variadischen Templates implementiert wird. Der GCC unterstützt das schon scheinbar.


Anmelden zum Antworten