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.