网站上线做什么,工业和信息化部网站备案系统查询,网页制作与设计html,wordpress支持多站点首先重载是不能做到的#xff0c;相同函数参数类型前提下#xff0c;不可能返回不同类型的返回值#xff0c;但是想弄一些歪招实现这个效果
模板不算#xff0c;因为模板会根据不同的输入参数类型生成不同的函数#xff0c;就不是调用相同的函数了
1、使用 void* 的返回…首先重载是不能做到的相同函数参数类型前提下不可能返回不同类型的返回值但是想弄一些歪招实现这个效果
模板不算因为模板会根据不同的输入参数类型生成不同的函数就不是调用相同的函数了
1、使用 void* 的返回值
然后自己强制转类型类似 malloc
void* test(int i);
2、类似使用工厂模式
使用虚函数
class base {
public:virtual void print(){cout base\n;}
};class father : public base {
public:void print(){cout father\n;}
};base* test(int i) {if (i 1)return new father();elsereturn new base();
}
3、使用 operator TypeName()
operator TypeName() 可以把一种类当另外一个类型用
#include iostream
using namespace std;class Foo {
public:operator bool() const {return true;}operator int() const {return 2;}operator string() const {return string;}
};int main(int argc, const char* argv[]) {Foo foo1;bool b foo1;int i foo1;string s foo1;cout b endl;cout i endl;cout s endl;return 0;
}
/*
* 输出
1
2
string
*/
基于此原理我们可以制作一个 test 函数实现文章开头提到的功能
#include iostream
using namespace std;class Foo {
public:Foo(bool b1, int i1, string s1) {b b1;i i1;s s1;}operator bool() const {return b;}operator int() const {return i;}operator string() const {return s;}bool b;int i;string s;
};
Foo test(bool b, int i, string s) {return Foo(b, i, s);
}
int main(int argc, const char* argv[]) {bool b test(1, 2, 3);int i test(1, 2, 3);string s test(1, 2, 3);cout b endl;cout i endl;cout s endl;return 0;
}
/*
* 输出
1
2
3
*/