我想简化一个包含大约一百个这样的表达式的代码:
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)
并解决使用哪些参数以及忽略哪一个参数,但它看起来不够漂亮.
因此问题是:是否有可能以更合理的方式在运行时解决函数重载?
假设所讨论的表达式中的任何符号都不能被分解出来,你会得到的最好的结果是
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
即,一个“流畅”的界面,每次都会记住正在使用的哪一侧。