我很无聊,想出了这样的hack(伪代码):
1 struct proxy {
2 operator int(); // int function
3 operator double(); // double function
4 proxy(arguments);
5 arguments &arguments_;
6 };
7
8 proxy function(arguments &args) {
9 return proxy(args);
10 }
11 int v = function(...);
12 double u = function(...);
在实际代码中使用是邪恶的吗?
我可能的使用场景是例如数组元素的乘积,它可能/可能不会溢出:
int size(short *array);
short size(short *array);
函数的原因,如果你使用模板,那么模板参数可以从函数参数中推断出来
最佳答案
我宁愿使用模板特化,只是感觉不那么“hacky”并且可能会更快(没有对象创建,当然可以通过智能编译器进行优化)。
但无论如何,我宁愿看到类似的代码
template<typename T> T function();
template<> int function() {
return 1;
}
template<> float function() {
return 1.0;
}
....
int a = function<int>();
float b = function<float>();
尽管您的代码没有问题,特别是如果您远离数字类型/指针,否则可能会出现意想不到的影响,C++ 中的转换规则相当复杂。
关于C++ 返回类型重载技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2816201/