模板能解决吗?宏能解决吗?你能解决吗?
时间:2010-08-09
来源:互联网
问题描述:
- class CData
- {
- public:
- int m_nVal;
- float m_fVal;
- bool m_bVal; // 失误。。。。这里我改了!
- };
- for(int idx=0; idx < 3; ++idx)
- {
- std::cout << vec[idx] <<std::endl;
- }
作者: pesoft 发布时间: 2010-08-09


作者: ecjtubaowp 发布时间: 2010-08-09
bool m_fVal;
你能编译过?
作者: 星空天神 发布时间: 2010-08-09
ecjtubaowp 发表于 2010-08-09 15:40
神人!
作者: rain_fish 发布时间: 2010-08-09
作者: daybreakcx 发布时间: 2010-08-09
作者: pesoft 发布时间: 2010-08-09
1. 它们在运行时保存丰富类型信息
2. 它们都有可以表达任意对象的变量
java, C#是object(配合boxing)
lua, python本来就是动态类型
C++显然都不具备。
因为不具备2, 所以d[ i ] 必须有一个确定的返回类型。
要么可以使用次之一点的语法来避免返回:
- for (int i=0; i<n; ++i) cout<<d[i]; // 改为:
- for (int i=0; i<n; ++i) d.save(i, cout);
- T::save(int i, std::ostream& os)
- {
- switch(i)
- {
- case 0: os<<i; break;
- case 1: os<<f; break;
- case 2: os<<b; break;
- }
- }
- struct R
- {
- void const* x;
- void (*out)(std::ostream& os, void const * x);
- };
-
- std::ostream& operator(std::ostream& os, R const& r)
- {
- r.out(os, r.x);
- return os;
- }
-
- template<typename T> void out(std::ostream& os, void const* x)
- {
- os<<*static_cast<T const*>(x);
- }
-
- R X::operator[](ptrdiff_t i)
- {
- R r;
- switch (i)
- {
- case 0: r.v = &this->i; r.out = out<int>; break;
- case 1: r.v = &this->f; r.out = out<float>; break;
- ...
- }
- return r;
- }
否则就要很繁琐的手工添加这些信息。
可以参考一些串行化库是添加这些信息并工作的。
比如有Qt那样的, 不直接声明成员, 而是用宏来声明, 顺便插入一些代码。
也有非侵入式的, 直接解析C源代码, 不编译, 仅生成类型信息。
好像CU有人就是这样做的。
作者: OwnWaterloo 发布时间: 2010-08-09
上面其实是我对目前遇到问题的一个简化版本。
我详细地描述一下问题,真实的问题。
1.我有很多类,但每个类中的一部分不同类型的数据要实现存储。
2.由于我比较懒,我想把这些数据放到一个数组中,然后在一个循环中存入文件。
但是,用模板可以识别类成员的类型,并将它们的地址存放到一个代理类中。起初发我期望把这个代理类指针存入一个数组,然后针对每一个将要存盘的类实例,使用这个数组中的地址存取。
可惜,我发现,在循环的过程中,我无论如何也法得到数据类型!
作者: pesoft 发布时间: 2010-08-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28