如果只包含简单数据类型,可以用union,包含了string类型,只能自己封装了,可参考如下方法:
#include
#include
#include
using namespace std;
union Mydata{
char data;
int data2;
double data3;
};
class UnionData{
public:
UnionData(int data):intData(data),datatype(1) {}
UnionData(char data):charData(data),datatype(2) {}
UnionData(double data):dData(data),datatype(3) {}
UnionData(string data):strData(data),datatype(4) {}
UnionData(char *data):strData(data),datatype(4) {}
private:
int intData;
char charData;
double dData;
string strData;
int datatype;
};
void mian()
{
//listmylist;
listmylist;
mylist.push_back(23);
mylist.push_back('c');
mylist.push_back(34.5);
mylist.push_back("Hello world");
}
你是想把不同的类型放入同一个list的对象?那除了自己写个list类,没其他办法。因为每个list里的元素长度在声明就固定了,所以迭代器才能正常使用
如果你是指用T代表同一种类型,那可以用类模板
class data_type{
public:
data_type(const char &r):iv(r){
mtype=_type::CHAR;
}
data_type(const int &r):iv(r){
mtype=_type::INT;
}
data_type(const string &r):sv(r){
mtype=_type::STRING;
}
data_type(const double &r):dv(r){
mtype=_type::DOUBLE;
}
//其它函数
private:
int iv;
double dv;
string sv;
enum _type{CHAR=0,INT,DOUBLE,STRING};
_type mtype;
};
//自己写一个类似联合的类 允许你所要的类型到该类的默认转换 和其它操作函数 也可以用系统默认的联合 只是你不知哪是哪而已
typedef std::list
any_val_list_type lst;
你想放什么都可以,不过取的时候自己做些处理
any_cast用起来要有技巧的,不然代码就很土
list
list
list
ilist.push_back(55);
clist.push_back('a');
slist.push_back("good boy");
可以参考下C++ Primer,里面很多例子,网上也有电子版下载。(建议买正版)