尾随返回类型将 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&>() + val<const U&>() ), P... > {};
这允许将原始程序中的 decltype 替换为类型名 sum_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中文网其他相关文章!