Chciałbym usprawnić kod, który ma około stu wyrażeń takich jak to:Czy jest możliwe przeciążenie funkcji w czasie wykonywania?
if(flag)
AddData(key, some_number);
else
AddData(key, error_description);
Gdzie AddData jest przeciążony jak
bool AddData(int key, double value);
bool AddData(int key, const char * error);
Chciałbym wyrazić powyższy kod tak :
AddData(key, flag? some_number : error_description);
co, oczywiście, nie będzie kompilować, ponieważ wartość flaga jest określana w czasie rzeczywistym i AddData podpis musi być określona w czasie kompilacji .
Łącząc obie funkcje w coś jak
bool AddData(int key, bool flag, double value, const char * error);
i rozwiązywania który z parametrów w użyciu, a która do ignorowania będzie działać, ale po prostu nie wygląda wystarczająco ładna.
W związku z tym pytanie: czy możliwe jest rozwiązanie problemu przeciążenia funkcji w czasie wykonywania w bardziej uzasadniony sposób?
'AddData (? Klucz, flaga some_number: ERROR_DESCRIPTION) ; 'wygląda podobnie do' AddData (key, flag, some_number, error_description); '... – Jarod42
Czy to ważne, że y jeden z 'someNumber' /' errorDescription' zostanie oceniony?Czy flaga ma inne wyrażenie dla każdego połączenia? – Deduplicator
Można użyć wskaźników funkcji. Opierając się na danych wejściowych, usuń zaznaczenie odpowiedniego wskaźnika funkcji. –