用于异构POD类型的C ++容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于异构POD类型的C ++容器相关的知识,希望对你有一定的参考价值。
是否有一种异构容器的形式,能够存储不同的原始类型(如int
,float
,double
)?
最后,我希望能够在计算中使用元素而不明确地引用类型,例如auto res = a + b
,其中操作数a
和b
是从容器中拉出的元素,可以是相同或不同类型。
答案
使用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 ++容器的主要内容,如果未能解决你的问题,请参考以下文章