首页 >后端开发 >C++ >如何使用'decltype”和可变参数模板函数来计算其参数的总和?

如何使用'decltype”和可变参数模板函数来计算其参数的总和?

DDD
DDD原创
2024-11-11 03:22:02932浏览

How to Use `decltype` with a Variadic Template Function to Calculate the Sum of its Arguments?

尾随返回类型将 decltype 与可变参数模板函数结合使用

尝试创建一个使用可变参数累加其参数总和的函数时模板和尾随返回类型语法出现了挑战。具体来说,编译器可能会遇到具有两个以上参数的函数的错误。这是因为可变参数函数模板只有在指定其返回类型后才被视为声明,导致 decltype 中的 sum 无法引用可变参数函数模板本身。

潜在的解决方法包括使用自定义特征类来避免 decltype 表达式中的递归调用:

template<class T> typename std::add_rvalue_reference<T>::type val();

template<class T> struct id{typedef T type;};

template<class T, class... P> struct sum_type;
template<class T> struct sum_type<T> : id<T> {};
template<class T, class U, class... P> struct sum_type<T,U,P...>
: sum_type< decltype( val<const T&amp;>() + val<const U&amp;>() ), P... > {};

这允许将原始程序中的 decltype 替换为类型名 sum_type::type,从而使编译成功。

为了确保求和遵循运算顺序(例如,a (b c)),sum_type 的最终特化可以修改如下:

template<class T, class U, class... P> struct sum_type<T,U,P...>
: id<decltype(
      val<T>()
    + val<typename sum_type<U,P...>::type>()
)>{};

以上是如何使用'decltype”和可变参数模板函数来计算其参数的总和?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn