其他分享
首页 > 其他分享> > c – 选择可变参数模板的最后一个参数的有效方法

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