c – 选择可变参数模板的最后一个参数的有效方法
作者:互联网
我知道如何选择可变参数模板的第一个参数:
template< class...Args> struct select_first;
template< class A, class ...Args> struct select_first<A,Args...>{ using type = A;};
这很简单.但是,select_last不相似:
template< class ...Args> struct select_last;
template< class A> struct select_last<A> { using type = A; };
template< class A, class Args...> struct select_last<A,Args...>{
using type = typename select_last<Args...>::type;
};
该解决方案需要深度递归模板即时.
我尝试用以下方法解决这个问题:
template< class A, class Args...>
struct select_last< Args ... , A>{ using type = A; }; // but it's not compiled.
问:存在更有效的方法来选择可变参数模板的最后一个参数?
解决方法:
使用C 17,最干净的方式是
template<typename T>
struct tag
{
using type = T;
};
template<typename... Ts>
struct select_last
{
using type = typename decltype((tag<Ts>{}, ...))::type;
};
具有O(1)实例化深度.
标签:c,c11,variadic-templates 来源: https://codeday.me/bug/20190927/1822449.html