c++ - 将不同的 std::tuple 类型存储在数组、 vector 或?

标签 c++ c++17 stdvector stdbind stdtuple

在最新的 C++ 版本(我猜是 17 或 20)中有什么方法可以将不同种类的元组存储在 std::array 或 std::vector 或其他内置数据类型中?例如可能是 ->

struct bunchOfTuples {
    std::tuple<float, float, int, int> firstTup = std::make_tuple(float, float, int, int);
    std::tuple<float, float, int> secondTup = std::make_tuple(float, float, int); };
    // bunch more tuples of differing types
};

有没有什么方法可以使用模板来实现类似的功能?还是类或结构实现?或者我没有想到的另一种方式是我对最新的 C++ 东西有点陌生?我正在研究一个自动方法调用项目。我有一些基本上可以用的东西,但这会使它更干净。

最佳答案

数组、 vector 和实际上所有标准容器都是同类的。这意味着容器的所有元素都具有相同的类型。 std::tuple 模板的不同实例是不同的类。因此,它们不能存储在一个数组中。

C++ 确实有异构包装器:std::variantstd::any。 Variant 是标记 union 的实现。它可用于存储来自预定义类型列表的对象。 anyvoid* 的类型安全包装器。它可以存储任何类型的对象。因此,变体或 any 的容器可能对您有用。

虽然它们只是低级工具,但对于更具特色的异构处理,有现有的库,例如 Boost.Hana。

关于c++ - 将不同的 std::tuple 类型存储在数组、 vector 或?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130406/

相关文章:

c++ - 对所有成员函数和属性使用 "this"是不好的做法吗?

c++ - QTextToSpeech 设置默认 QLocale

templates - C++ 可变模板推导逻辑

c++ - 通过初始化列表或变量推回结构数组

c++ - std::vector 的 push_back() 导致奇怪的编译时错误消息

c++ - 用于 std::vector 内存管理的不同乘数

c++ - 错误 : Invalid use of incomplete type

c++ - 无法打开文件并从中读取

c++ - 如何测试 C++ 的功能支持?

c++ - 访问并调用 std::function 的变体