std::tr1::function und Funktor
-
Hallo Forum,
ich habe gewisse Probleme damit, einer
std::tr1::functioneinen Funktor zuzuweisen... Vielleicht könnt ihr mir ja helfen...#include <functional> #include <iostream> using namespace std; typedef std::tr1::function< int (int, int) > Signature; // ... MyFunctor // ... MyFunction int main() { Signature s1(MyFunctor()), // Fehler! s2(MyFunction); cout << s1(1, 2) << endl; cout << s2(1, 2) << endl; }Sieht jemand was ich falsch mache?
-
Unheimlich praktisch wäre es, die Definition von MyFunctor zu wissen. Sonst müsste ich die Glaskugel ausgraben und das ist ein Billigteil...
-
- Was meinst du mit "Probleme"?
- Ohne die Deklaration von MyFunctor wird man dir wohl nur schwer helfen können.
-
Eigentlich nix besonderes...
class MyFunctor : public std::binary_function< int, int, int > { public: int operator () (int i, int j) const { return i + j; } };
-
Ich vermute, dass
Signature s1(MyFunctor())für den Compiler wie eine Funktionsdeklaration aussieht. Versuch mal
MyFunctor f; Signature s1(f);
-
seldon schrieb:
Ich vermute, dass
Signature s1(MyFunctor())für den Compiler wie eine Funktionsdeklaration aussieht. Versuch mal
MyFunctor f; Signature s1(f);Oder das:
Signature s1 = MyFunctor();
-
Hmm...
so funktionierts auch:Signature s = Signature(MyFunctor())Warum geht das? aber nicht:
Signature s(MyFunctor())
-
daersc schrieb:
Signature s(MyFunctor())Vergleiche:
MyFunctor f; Signature s(MyFunctor()); // <-- s(f); // <-- Aufruf der _Funktion_ sAlles, was wie eine Funktionsdeklaration interpretiert werden könnte, ist auch eine Funktionsdeklaration.
-
Signature s(MyFunctor());Das deklariert eine Funktion f, die ein Signatureobjekt zurückgibt und als Argument einen Zeiger auf eine parameterlose Funktion, die ein MyFunctor zurückgibt, erwartet. Abhilfe können z.B. zusätzliche Klammern bieten:
Signature s((MyFunctor()));