gpt4 book ai didi

c++ - 选择可变参数模板最后一个参数的有效方法

转载 作者:IT老高 更新时间:2023-10-28 21:40:53 42 4
gpt4 key购买 nike

我知道如何选择可变参数模板的第一个参数:

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
{
// Use a fold-expression to fold the comma operator over the parameter pack.
using type = typename decltype((tag<Ts>{}, ...))::type;
};

实例化深度为 O(1)。

关于c++ - 选择可变参数模板最后一个参数的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18942322/

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