Ich möchte einen Code optimieren, die etwa hundert von Ausdrücken wie folgt hat:Kann eine Funktion zur Laufzeit überlastet werden?
if(flag)
AddData(key, some_number);
else
AddData(key, error_description);
Wo AddData ist überlastet als
bool AddData(int key, double value);
bool AddData(int key, const char * error);
ich so den oben stehenden Code zum Ausdruck bringen möchten :
AddData(key, flag? some_number : error_description);
, die, natürlich, kompiliert nicht, weil der Wert des Kennzeichens zur Laufzeit und AddData Unterschrift muss bestimmt wird bei der Kompilierung bestimmt werden .
beide Funktionen in etwas Kombination wie
bool AddData(int key, bool flag, double value, const char * error);
und Lösung, welche der Parameter zu verwenden und welche würden arbeiten zu ignorieren, aber es sieht einfach nicht schön genug.
Also die Frage: ist es möglich, die Funktionsüberlastung zur Laufzeit vernünftiger aufzulösen?
'AddData (? Schlüssel, Flagge some_number: ERROR_DESCRIPTION) ; 'sieht ähnlich aus wie' AddData (key, flag, some_number, error_description); '... – Jarod42
Ist es wichtig, dass onl y einer von 'someNumber' /' errorDescription' wird ausgewertet?Auch, ist die Flagge ein anderer Ausdruck für jeden Anruf? – Deduplicator
Sie könnten Funktionszeiger verwenden. Basierend auf der Eingabe dereferenzieren Sie den entsprechenden Funktionszeiger. –