请教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个回答

#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);
}

代码没有贴正确,请你重写贴代码,你有V T两个参数,那么你模板里面是不是2个参数都有

//你的问题在于 返回类型 返回类型不明确 这个v从来没有被申明是什么类型,因为他不在参数中
//如果你想调用这种模板 调用就得用 显示实例化 这样就不会出错 调用申明 那两个是申明类型

int _tmain(int argc, _TCHAR*argv[])
{
        double result=cal<int, double>(1, 1);

}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问