gpt4 book ai didi

c++ - Variadic 函数 - 确定返回类型

转载 作者:行者123 更新时间:2023-11-30 00:50:03 25 4
gpt4 key购买 nike

我正在玩可变参数模板,但遇到以下问题:

template <class T1, class T2>
auto sum(T1 a, T2 b) ->decltype(a + b){
return a + b;
}
template <class T1, class T2, class... T3>
auto sum(T1 a, T2 b, T3... tail) ->decltype(a + b){
return a + sum(b, tail...);
}

函数调用:

cout << sum(1, 2, 3, 4) << endl;    // 10 - OK
cout << sum(1.5, 2, 3, 4) << endl; // 10.5 - OK
cout << sum(1, 2, 3.5, 4) << endl; // 10 !! wrong result

我在这里做错了什么?

最佳答案

sum(1, 2, 3.5, 4)

前两个参数是 int 类型。因此在尾随返回类型中,decltype(a + b)int,因此结果被转换为 int - 并被截断。

使用std::common_type :

template <class T1, class T2, class... T3>
typename std::common_type<T1, T2, T3...>::type
sum(T1 a, T2 b, T3... tail)
{
return a + sum(b, tail...);
}

注意

template <class T1, class T2, class... T3>
auto sum(T1 a, T2 b, T3... tail) ->decltype(a + sum(b, tail...))

不起作用,因为第二个模板在 trailing-return-type 中是未知的,只有第一个。使用 C++14,返回类型推导是可能的:

template <class T1, class T2, class... T3>
auto sum(T1 a, T2 b, T3... tail)
{
return a + sum(b, tail...);
}

关于c++ - Variadic 函数 - 确定返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com