C++ 类型数组?

C++ 类型数组?,c++,pointers,types,C++,Pointers,Types,我有几个结构,我想创建一个数组,这样我就可以使用它的成员作为模板的参数,比如types={int,float};乘法()。它可以通过重载完成,但是我有很多函数,所以这不是一种方法。据我所知,我们只能将类型存储为指针(因此我实际上必须取消对它的引用:multiply();),但这里我停下来理解一下,因为要创建指针,我必须知道它指向的变量的类型,以及类(类型)的类型是什么?我想“去他妈的,我会用auto”,但似乎指向不同类的指针是不同类型的,所以我必须删除它们的类型以将它们存储在一个公共数组中,等等

我有几个结构,我想创建一个数组,这样我就可以使用它的成员作为模板的参数,比如
types={int,float};乘法()。它可以通过重载完成,但是我有很多函数,所以这不是一种方法。据我所知,我们只能将类型存储为指针(因此我实际上必须取消对它的引用:
multiply();
),但这里我停下来理解一下,因为要创建指针,我必须知道它指向的变量的类型,以及类(类型)的类型是什么?我想“去他妈的,我会用auto”,但似乎指向不同类的指针是不同类型的,所以我必须删除它们的类型以将它们存储在一个公共数组中,等等,我现在有了这个:

auto types = {std::make_shared<void>(Student), std::make_shared<void>(Citizen)};
auto-types={std::make_-shared(学生),std::make_-shared(公民)};

并指出学生和公民< /C>不引用值。

< P>方便的内置C++类型数组为./P> 要访问std::tuple中的第i个类型,请使用

例如:

使用types=std::tuple;
乘法();

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

您可以使用帮助器类型使其不那么冗长:

模板
结构类型数组{
使用as_tuple=std::tuple;
模板
使用get=std::tuple\u元素\u t;
静态constexpr std::size\u t size=sizeof…(类型);
};
使用类型=类型\数组;
乘法();

<代码> > P>方便的内置类型的C++数组是./p> 要访问std::tuple中的第i个类型,请使用

例如:

使用types=std::tuple;
乘法();

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

您可以使用帮助器类型使其不那么冗长:

模板
结构类型数组{
使用as_tuple=std::tuple;
模板
使用get=std::tuple\u元素\u t;
静态constexpr std::size\u t size=sizeof…(类型);
};
使用类型=类型\数组;
乘法();
我有几个结构,我想创建它们的数组

<>在C++中,<>强>数组中包含的元素都是相同的。在运行时,类型已经消失了,因为它们已经消失了(除了with,related to)。因此,不能直接使用包含不同类型元素的数组(或者不将其称为数组)

请参阅C++ 11标准,以了解更多关于C++的内容。你也可以找到标准

<>看起来你想要C++中的一些。然后考虑使用C++ 17标准。 如果你想要一个数组,当然可以使用
std::tuple
as

<强>利用现有的C++ ,当它们符合你的需要时。当然,您可以将它们与产品类型、总和类型、嵌套容器等组合在一起

如果您不能使用C++17,而只能使用C++11,并且需要实现一些带标记的联合,请使用一些匿名的
union
,但要注意以下问题。也可以使用(或以自己的方式提供标记工会)。

阅读也不错,因为C++是一种非常困难的编程语言(我不要求掌握,只是为了使用)。 我有几个结构,我想创建它们的数组

<>在C++中,<>强>数组中包含的元素都是相同的。在运行时,类型已经消失了,因为它们已经消失了(除了with,related to)。因此,不能直接使用包含不同类型元素的数组(或者不将其称为数组)

请参阅C++ 11标准,以了解更多关于C++的内容。你也可以找到标准

<>看起来你想要C++中的一些。然后考虑使用C++ 17标准。 如果你想要一个数组,当然可以使用
std::tuple
as

<强>利用现有的C++ ,当它们符合你的需要时。当然,您可以将它们与产品类型、总和类型、嵌套容器等组合在一起

如果您不能使用C++17,而只能使用C++11,并且需要实现一些带标记的联合,请使用一些匿名的
union
,但要注意以下问题。也可以使用(或以自己的方式提供标记工会)。

阅读也不错,因为C++是一种非常困难的编程语言(我不要求掌握,只是使用)。听起来好像你想要一个<代码>:ST::vector < /COD> > NaNaOLIVER,我不需要数组,有不同类型的元素,我需要数组类型自己。如果你真的想要一个类型数组,使用

std::tuple
。@Artyer谢谢!有没有办法通过数组来实现?因为我认为类型的类型应该是相同的类型。。。那么就不需要
元组了。@NathanOliver等等,我想了想,现在我不明白
元组在这里是怎么工作的。同样,它允许我创建一个包含不同类型元素的数组,而不是类型本身。听起来你想要一个
std::vector
@NathanOliver我不需要包含不同类型元素的数组,我需要类型本身的数组。如果你真的想要一个类型数组,请使用
std::tuple
。@Artyer谢谢你!有没有办法通过数组来实现?因为我认为类型的类型应该是相同的类型。。。那么就不需要
元组了。@NathanOliver等等,我想了想,现在我不明白
元组在这里是怎么工作的。同样,它让我用不同类型的元素创建一个数组,而不是类型本身。所以我们创建了一个元组,我们实际上不使用它,而是访问它的类型?@AlexeiSavitsky我们没有构造它,是的。这只是索引参数包
类型
“所有索引都需要在编译时进行的最简单的方法