C++ 返回类型重载技巧

标签 c++ function overloading

我很无聊,想出了这样的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/

相关文章:

c++ - C++ 中的变量初始化

c++ - QT连接没有匹配的函数可以调用

c - 如何从单个函数返回不同类型

c - 函数的返回值对于变量和数组的行为有何不同

java - 最终类型转换概念不适用于重载

C# 运算符重载、重写字符串?

c++ - 对函数的调用是不明确的,但为什么呢?

c++ - 如何使用模板元编程展开 for 循环

c++ - 无法让 ReadFile 从我刚刚写入的文件中读取

c++ - 在 boost::asio 中自定义套接字/关闭系统调用