一般情况下这种重载是不可用实现的,因为c++可以忽略返回值,因此在有些情况下不知道那个函数被调用.
如
void fun(const int&);
int fun(const int&);
但是可以通过将函数定义为struct,并将函数重载定义为运算符重载来实现,如下:
#include <iostream>
struct fun {
int a_;
fun(const int& a) : a_(a) {}
operator int() {
std::cout << "int" << std::endl;
return a_ + 5;
}
operator double() {
std::cout << "double" << std::endl;
return a_ + 3;
}
};
int main() {
int a = fun(3);
double b = fun(3);
std::cout << a << std::endl;
std::cout << b << std::endl;
return 0;
}
结果:
int
double
8
6
ps; 但是对于返回值为void的情况笔者暂时无能为力