gpt4 book ai didi

c++ - 类型数组?

转载 作者:行者123 更新时间:2023-12-02 02:50:13 25 4
gpt4 key购买 nike

我有几个结构体,我想创建一个它们的数组,以便我可以使用其成员作为模板的参数,例如 types = {int, float}; multiply<types[i]>(); 。可以通过重载来完成,但是我有很多函数,所以这不是一种方法。据我所知,我们只能将类型存储为指针(所以我实际上必须取消引用它: multiply<*types[i]>(); ),但在这里我停止理解,因为要创建一个指针,我必须知道它指向的变量的类型,什么是类的类型(类型的类型)?我想“管它,我会使用 auto”,但似乎指向不同类的指针具有不同的类型,因此我必须删除它们的类型以将它们存储在公共(public)数组中,依此类推,我现在有这个:

auto types = {std::make_shared<void>(Student), std::make_shared<void>(Citizen)};

它说 StudentCitizen不要引用值。

最佳答案

C++ 中方便的内置类型数组是 std::tuple<Types...> .

要访问 std::tuple 中的第 i 个类型,请使用 std::tuple_element_t<i, your_tuple> .

例如:

using types = std::tuple<int, float>;
multiply<std::tuple_element_t<i, types>>();

类型仅在编译时“存在”,因此所有索引都需要在编译时存在,并将它们存储在类型信息中(此处为 std::tuple 中的可变参数类型),而不是存储在变量中。

您可以使用辅助类型来使其不那么冗长:

template<class... Types>
struct type_array {
using as_tuple = std::tuple<Types...>;

template<std::size_t I>
using get = std::tuple_element_t<I, as_tuple>;

static constexpr std::size_t size = sizeof...(Types);
};

using types = type_array<int, float>;
multiply<types::get<i>>();

关于c++ - 类型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62139568/

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