2016-05-20 10 views
4

Ich habe einen typedef etwas wie folgt aus:std :: Funktionsargumente Liste und typedefs

typedef std::function<int arg1, float arg2> MyFunction; 

Und irgendwo in meinem Code ist es so verwendet:

MyFunction func = [](int arg1, float arg2){ /* do someting */ }; 

Die Sache ist, dass jedes Mal, Ich ändere die Anzahl der Argumente der Funktion (zum Beispiel füge ich das dritte Argument char arg3 hinzu) - ich bin gezwungen, es überall dort zu aktualisieren, wo ich MyFunction benutzt habe (auch wenn diese Argumente überhaupt nicht verwendet werden.)

Und ich bin zu faul, das zu tun. Gibt es eine Möglichkeit, die Argumentliste von std :: function von ihrem Typ zu bekommen? (Ich meine), so dass Funktion Schöpfung so aussehen könnte ?:

MyFunction func = [](MyFunction::args){ /* do someting */ }; 
+3

Verwenden Sie ['auto'] (http://en.cppreference.com/w/cpp/language/auto)? – NathanOliver

+0

@NathanOliver Die Argumentnummer wird nicht automatisch geändert. – songyuanyao

+0

Das Hinzufügen neuer Argumente führt zu einer Änderung des Rumpfcodes. Sie müssen alle durchgehen und den Körper verändern. Es wird also nicht so sehr weh tun, die Argumente zu ändern. Wie auch immer, finden und ersetzen ist auch eine Lösung. –

Antwort

0

Da C++ 14, können Sie ein variadische polymorphes Lambda verwenden:

MyFunction func = [](int arg1, float arg2, auto&&... unused){ /* ... */ }; 

Diese für jede Signatur zu std::function<Sig> konvertieren Anfang int, float.