小编Ram*_*sey的帖子

如何在C++容器中存储不同类型的对象?

是否有一个我可以使用或构建的C++容器,可以包含,比如intstringdouble类型?我面临的问题是每当我尝试填充地图,矢量或列表时,例如,以下内容:

int x;
string y;
double z;
Run Code Online (Sandbox Code Playgroud)

我受限于以下格式:

list<int> mycountainer;
vector<string> mycontainer;
Run Code Online (Sandbox Code Playgroud)

哪种力量mycontainer只包含一种类型.

在任何人提出泛型之前,由于C++附带的标准vectorlist容器已经是通用的,因此它们无法工作 - 它们可以是任何类型的容器,但不能包含多种类型.

如果可能的话,我也想避免使用Boost - 我更喜欢它,如果有一种简单的方法我可以自己编码.

[编辑]嘿伙计,非常感谢你的建议 - 我应该解释我将如何使用这个容器,但它有点复杂,因此上面的(大)简化.我认为这里最好的选择是使用Boost.再次感谢.

c++ polymorphism containers types

25
推荐指数
4
解决办法
4万
查看次数

C++ Simple Variant Boost

我正在尝试使用变量boost创建对象列表.

#include <string>
#include <list>
#include <iostream>
#include <boost/variant.hpp>

using namespace std;
using namespace boost;   

class CSquare;

class CRectangle {
public:
  CRectangle();
};

class CSquare {
public:
  CSquare();
};

int main()
{   typedef variant<CRectangle,CSquare, bool, int, string> object;

    list<object> List;

    List.push_back("Hello World!");
    List.push_back(7);
    List.push_back(true);
    List.push_back(new CSquare());
    List.push_back(new CRectangle ());

    cout << "List Size is: " << List.size() << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,产生了以下错误:

/tmp/ccxKh9lz.o: In function `main':
testing.C:(.text+0x170): undefined reference to `CSquare::CSquare()'
testing.C:(.text+0x203): undefined reference to `CRectangle::CRectangle()'
collect2: ld returned …
Run Code Online (Sandbox Code Playgroud)

c++ boost

3
推荐指数
1
解决办法
559
查看次数

标签 统计

c++ ×2

boost ×1

containers ×1

polymorphism ×1

types ×1