gpt4 book ai didi

c++ - 如何将 TypeList 恢复为其原始参数包

转载 作者:行者123 更新时间:2023-11-30 05:21:27 26 4
gpt4 key购买 nike

我无法找到有关如何使用 c++11 可变类型列表作为可移植参数包容器的信息。假设我有这段代码。

#include <type_traits>

template <typename T, typename... Ts>
struct Index;

template <typename T, typename... Ts>
struct Index<T, T, Ts...> : std::integral_constant<std::size_t, 0> {};

template <typename T, typename U, typename... Ts>
struct Index<T, U, Ts...> : std::integral_constant<std::size_t, 1 + Index<T, Ts...>::value> {};

我可以使用它在参数包中找到类型的第一个索引,就像这样。

int main() 
{
using namespace std;

cout << Index<int, int>::value << endl; //Prints 0
cout << Index<char, float, char>::value << endl; //Prints 1
cout << Index<int, double, char, int>::value << endl; //Prints 2
}

我怎样才能为 TypeList 实现这种行为?我正在尝试创建这样的东西。

template <typename ...>
struct TypeList {};

int main()
{
using namespace std;
using List = TypeList<char, short, long>

cout << Index<short, ConvertToParameterPack<List>::types...>::value << endl; //Prints 1
}

其中 ConvertToParameterPack 是将 TypeList 恢复为其 ParameterPack 的某种方法。如果我所问的是不可能的,还有其他好的方法可以解决这个问题吗?

最佳答案

template<std::size_t I>
using index_t=std::integral_constant<std::size_t,I>;

template<class T, class List>
struct Index{};

template<class T, class...Ts>
struct Index<T, TypeList<T,Ts...>>:
index_t<0>
{};

template<class T,class U, class...Ts>
struct Index<T, TypeList<U,Ts...>>:
index_t< 1+Index<T,TypeList<Ts...>::value >
{}

关于c++ - 如何将 TypeList 恢复为其原始参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097153/

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