用于异构POD类型的C ++容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于异构POD类型的C ++容器相关的知识,希望对你有一定的参考价值。

是否有一种异构容器的形式,能够存储不同的原始类型(如intfloatdouble)?

最后,我希望能够在计算中使用元素而不明确地引用类型,例如auto res = a + b,其中操作数ab是从容器中拉出的元素,可以是相同或不同类型。

答案

使用C ++ 17,您可以将std::any与任何容器一起使用。使用较旧的C ++版本,您可以使用boost::any

#include <iostream>
#include <vector>
#include <any>

struct A
{
    int a;
    explicit operator int() const { return a; }
};

struct B
{
    double b;
    explicit operator double() const { return b; }
};

int main()
{
    A a{ 5 };
    B b{ 6.};

    std::vector<std::any> v;
    v.push_back(3 );
    v.push_back(4.);
    v.push_back(a );
    v.push_back(b );

    for (auto const e : v)
    {
        if (e.type() == typeid(double))
            std::cout << std::any_cast<double>(e) << std::endl;

        if (e.type() == typeid(B))
            std::cout << (double)std::any_cast<B>(e) << std::endl;
    }
}

以上是关于用于异构POD类型的C ++容器的主要内容,如果未能解决你的问题,请参考以下文章

基于 C++17 中的范围,用于自定义容器或具有不同开始/结束类型的通用类

C++-----基于范围的for循环

类型安全的异构容器

一个具有两种显示类型的片段[关闭]

队列的头函数使用C++

C++queue容器学习(详解)