Wie deklarieren Sie zwei Funktionen, die die Signatur des anderen als Argument annehmen?

9

Ist es möglich, etwas so zu emulieren:

%Vor%

Das Hauptziel ist, in der Lage zu sein, Code in pseudo-c ++ zu schreiben:

%Vor%     
abyss.7 13.12.2011, 08:26
quelle

4 Antworten

2

Nicht direkt möglich mit typedefs; Wo auch immer ein typedef verwendet wird, ist äquivalent zum Originaltyp, wenn Sie also

schreiben %Vor%

dann wäre B äquivalent zu boost::function<void(A)> , Dies entspricht boost::function<void(boost::function<void(B)>)> usw., bis Sie

erhalten %Vor%

, was eine Art unendlicher Länge ist.

Sie können jedoch (mindestens) einen der beiden Typen als struct oder class definieren:

%Vor%

Sie müssen möglicherweise weitere Konstruktoren und / oder einen Konvertierungsoperator hinzufügen, damit sich der Typ vollständig "transparent" verhält, oder Sie können einfach explizit auf die Struktur zugreifen.

    
wolfgang 13.12.2011, 09:52
quelle
3

Ihre Frage ist nicht technisch präzise. Eine Signatur wird nicht als Argument übergeben. Ich versuche mein Bestes, um Ihre Frage zu verstehen.

Die folgenden Funktionsobjekte können als Argumente aneinander übergeben werden

%Vor%     
Johannes Schaub - litb 13.12.2011 09:12
quelle
0

Haben Sie in Betracht gezogen, Funktionszeiger zu verwenden?

%Vor%

Ich habe diesen Beispielcode erstellt und es funktioniert. Vielleicht könntest du es benutzen.

    
thim 13.12.2011 08:41
quelle
0

Ich habe erreicht, was Sie beschrieben haben, indem Sie diese Funktionen als void* aneinander übergeben. Vielleicht ist es nicht der schönste Weg, aber es funktioniert (ich habe es getestet).

%Vor%     
ghik 13.12.2011 09:20
quelle