无需问津 2019-11-15 15:18 采纳率: 100%
浏览 256
已采纳

请教C++模板函数的问题

模板函数的输出类型与输入类型不一致时怎么处理?
例如输入类型为int类型,输出为double

template <typename T, typename V>
typename V cal(T,T);

template <typename T, typename V>
typename V cal(T a,T b)
{
    return (a+b+0.1)
}

编译时会报错,但如果为:

template <typename T, typename V>
typename V cal(V,T);

template <typename T, typename V>
typename V cal(V a,T b)
{
    return (a+b+0.1)
}

又可以生成可执行文件,这是什么原理啊?
好像采纳错了,尴尬。采纳的回答和我问的问题不一致。

果然最后还是要靠自己,看书后发现模板函数好像要求输出类型与第一个参数类型一致,看的是数据结构C++实现

  • 写回答

3条回答

  • 斗酒神僧 2019-11-16 09:54
    关注
    #include <type_traits>
    using namespace std;
    
    template <typename T1, typename T2>
    auto cal_1(T1 arg1, T2 arg2) -> decltype(arg1 + arg2)
    {
        return arg1 + arg2;
    }
    
    template <typename T1, typename T2>
    auto cal_3(T1 arg1, T2 arg2) -> decltype(declval<T1>() + declval<T2>())
    {
        return arg1 + arg2;
    }
    
    template <typename T1, typename T2>
    auto cal_2(T1 arg1, T2 arg2) -> decltype(T1{} +T2{})
    {
        return arg1 + arg2;
    }
    
    // 需要C++14
    template <typename T1, typename T2>
    auto cal_4(T1 arg1, T2 arg2)
    {
        return arg1 + arg2;
    }
    
    int main()
    {
        int x = 1;
        double y = 2;
        auto z1 = cal_1(x, y);
        auto z2 = cal_2(x, y);
        auto z3 = cal_3(x, y);
        auto z4 = cal_4(x, y);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘