C++模板函数在不同条件下返回不同类型数据怎么实现

我想在一个模板函数里实现根据情况返回两种不同类型的数据,实例化的时候一种数据能比较,另一种数据在这种实例化情况下不能比较,本身在这个条件下这一段不会运行,然后就报错了,比... 我想在一个模板函数里实现根据情况返回两种不同类型的数据,实例化的时候一种数据能比较,另一种数据在这种实例化情况下不能比较,本身在这个条件下这一段不会运行,然后就报错了,比如我实例化模板函数返回int型,我要返回int型变量,判断条件不会执行char型与int型的比较,但是编译器会报错,两种数据不能比较,我又不想重载函数,我该怎么办,求教
举个例子:
int a; string b;
template<typename T>
T revback(int key)
{
if(key == 0)
return a;
else
return b;
}
我觉得不太可能,想问问到底有没有办法,如果没有还有其他方法使得代码更少吗?难道要重载?我一个对象有很多组数据的话,重载是不是太麻烦了
展开
 我来答
l7722526
2018-06-28 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:84%
帮助的人:3872万
展开全部
这要看A1的是什么数据,如果是文本数据,公式if(or(a1="星期六",a1="星期日"),"今天为公休假日","今天为工作日")没有错。但如果是日期格式,上面的公式不能用,应该是=IF(OR(WEEKDAY(A1,2)={6,7}),"今天为公休假日","今天为工作日")
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻形术
2018-06-28 · TA获得超过1262个赞
知道小有建树答主
回答量:994
采纳率:81%
帮助的人:269万
展开全部
上代码吧,说那么多有人能看懂么
追问
case 1:下的是data[mid].name是string类型的
追答
C++是强类型语言,对于返回类型确定的情况下,函数体里每个return后面的数据类型必须相同。出现这样的问题只能说是你的代码设计有问题了。
如果调用revback(1);你说你是想得到int类型返回值,可实际返回的是b啊?同理调用revback(0)呢。这就是一个错误的设计。
当然在微软的VC里有一个Variant类型,可以用它来作返回值类型,可以接受很多种数据类型,但是不能跨平台用。当然你也可以自定义一个这样的东西。
C++17标准里才出了 std::variant 数据类型,但需要很高版本的编译器才行。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式