是否可以在运行时重载函数?

Mic*_*ael 5 c++ overloading

我想简化一个包含大约一百个这样的表达式的代码:

if( flag )
    AddData( key, some_number );
else
    AddData( key, error_description );
Run Code Online (Sandbox Code Playgroud)

AddData被重载的地方

bool AddData( int key, double value );
bool AddData( int key, const char * error );
Run Code Online (Sandbox Code Playgroud)

我想像上面这样表达上面的代码:

AddData( key, flag? some_number : error_description );
Run Code Online (Sandbox Code Playgroud)

当然,它不会编译,因为标志的值是在运行时确定的,而AddData签名需要在编译时确定.

将两种功能组合成类似的东西

bool AddData( int key, bool flag, double value, const char * error );
Run Code Online (Sandbox Code Playgroud)

并解决使用哪些参数以及忽略哪一个参数,但它看起来不够漂亮.

因此问题是:是否有可能以更合理的方式在运行时解决函数重载?

Phi*_*ler 0

假设所讨论的表达式中的任何符号都不能被分解出来,你会得到的最好的结果是

AddData(key, flag, some_number, error_description)
Run Code Online (Sandbox Code Playgroud)

如果您可以将其分解为可能flag适用于多个调用,那么您可以开始使用类似的结构做得更好

Adder<flag>{}
  .AddData(key1, val1, error1)
  .AddData(key2, val2, error2)
  .AddData(...)
  .
  .
Run Code Online (Sandbox Code Playgroud)

if即,一个“流畅”的界面,每次都会记住正在使用的哪一侧。