2016-04-23 11 views
-1

Wenn ich eine Struktur:C++, wie Operatoren für Membervariablen, um eine Überlastung

typedef struct Foo 
{ 
    std::function<bool()> func; 
}Foo; 

und ich habe eine Lücke Funktion

void bar(){std::cout << "hey";} 

und ich möchte in der Lage sein, dies zu tun:

Foo f; 
f.func = bar // f.func == func(){std::cout << "hey"; return true;} 
+1

Keine Notwendigkeit für die 'typedef struct X { } X 'Unsinn in C++. Schreiben Sie einfach 'struct X {}' –

+0

Wenn Sie googlen * C++ Überladungsoperatoren für Membervariablen * erhalten Sie Ihre Antwort. Sie sollten selbst etwas arbeiten, und nur wenn Sie nach der Due Diligence immer noch ratlos sind, fragen Sie hier. – MikeJRamsey56

Antwort

1

Die erste Sache ist, dass der Funktionstyp für void bar() {}void() und nicht bool() ist sein, so sollte func:

std::function<void()> func; 

zweite Sache: es ist unklar, was „C++, wie Operatoren für Variablen Mitglied zu überlasten“ bedeutet. Wenn Sie Ihren Code kompilieren möchten, ist die obige Änderung ausreichend. Der Operator, den Sie überlasten können, ist void operator()() { func(); }, wenn Sie f(); aufrufen möchten.

Wenn Sie bool() Funktionstyp zu halten und noch in der Lage sein void() Funktion aufrufen, dann können Sie einen Lambda verwenden, die bar nennen würde und return true:

f.func = [](){ bar(); return true;}; 
+0

Der Kommentar in der letzten Zeile legt nahe, dass die Zuweisung zu 'f.func' führen soll, um eine modifizierte Version von' bar' zu speichern, die nach dem, was 'bar' normalerweise tut, true zurückgibt. –