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

问题描述 投票:0回答:1

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

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

c++ c++11 stl containers
1个回答
3
投票

使用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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.