无需问津 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条)

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊