无需问津 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 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出