如何去实现一个自定义类,这个类可以实现任意常规数据的插入

例如: Valis data;

  
data<<1<<"aa"<<2.1<<false;
data[0] == 1, data[1] == "aa" data[2] == 2.1 data[3] == alse
评论 (0)链接2012-01-30 

我觉得,C++作为一种强类型语言,同时对一些基本类型又缺乏足够的运行时信息,要想完全实现动态语言那样的弱类型效果的确比较困难。它只能在一定范围里实现“弱类型”:

  1. 要不,你把希望插入的数据类型统一封装成单一继承体系的类,然后自己重载<<和[]操作符,就能实现向容器中任意插入了;

  2. 否则,你可以借助std::vector<boost::any>这个容器,编译期静态实现:

  
std::vector<boost::any> v = boost::list_of<boost::any>(1)(2.1)(string("aa"));

或者在程序运行时动态push_back进去更多任意的类型。但是这样在遍历v的时候一样会遇到麻烦,因为boost::any需要我们在获取其值的时候明确指定要转换成的类型,因此,很难实现用统一的代码遍历。

只是一点儿思路 :-)

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-01-30

似乎是要提供类似AS中的Array的功能哦。
1:你写的其实就是一个例子。。去看看cout的实现也就有思路了。
typedef basic_ostream<char, char_traits<char> > ostream;
2:Obj-C中的Array可以存放指向任意对象的指针,可以借鉴一下思路。
话说真有这个必要吗,这种需求应该是可以避开的吧。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-01-30
  • 0 支持
    我是看到有人实现的源代码 ,感觉人家写的很巧妙,是用来实现函数参数传递的一个桥梁
    例如 fun(int a,char*data,float b,bool value,int64 c,wchar* data1,void *value1... ) 一系列数据的插入 人家写成了一个类 ,fun(valist data) data 插进去了 很多不同的数据类型 并且很方便的取出来 所以看看大家有没有兴趣实现以下
    – 海之梦 2012-01-30
  • 0 支持
    参数传递,梓瀚的VL++ Library仿反射有一个不是很优美的实现,你也可以看看:
    http://www.cppblog.com/vczh/archive/2009/06/30/88880.html
    还是评论吧,免得有人再反对。。。。
    – 王辉 2012-01-30
德问是一个专业的编程问答社区,请 登录注册 后再提交答案