360面试题,如何序列化泛型对象

lookupheaven 2015-09-23 11:36:22
昨天去360面试,考官问我如何将一个泛型对象T& obj序列化到XML文档中,没想出来如何遍历泛型对象的数据成员,大家有什么思路?
...全文
511 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuankuan_qiao 2015-09-25
  • 打赏
  • 举报
回复
遇事不怒,勤换内裤,基本吃素,谦虚才能使人进步!
lookupheaven 2015-09-24
  • 打赏
  • 举报
回复
引用 8 楼 lovesmiles 的回复:
泛形类对像也要实例化的。 如果用参数<T>来实例化某个泛形类,当实例化后,它就是一个一般的类。 用递归的方法,将泛形类分解成已知的类,而这些已知类是可以序列化的。 就相当于叠积木,既然每个积木都可以序列化,那它们的任意组合也可以序列化。
将泛型类分解成已知的类,是什么意思?
勤奋的小游侠 2015-09-24
  • 打赏
  • 举报
回复
泛形类对像也要实例化的。 如果用参数<T>来实例化某个泛形类,当实例化后,它就是一个一般的类。 用递归的方法,将泛形类分解成已知的类,而这些已知类是可以序列化的。 就相当于叠积木,既然每个积木都可以序列化,那它们的任意组合也可以序列化。
lookupheaven 2015-09-24
  • 打赏
  • 举报
回复
引用 6 楼 sdghchj 的回复:
[quote=引用 2 楼 Razor87 的回复:] [quote=引用 1 楼 sdghchj 的回复:] 不明白考点在哪。能先说说非泛型对象怎么序列化么
这就是问题啊,你把序列化理解成保存到xml文档中就成,用哪个xml库都无所谓。 我现在能想到的就是给泛型对象实现一个保存xml文档的接口,在序列化的时候直接调用, 否则我实在想不出来如何去遍历一个泛型对象的成员。[/quote] 我想说的是,纯泛型会有对象么?能实例化么?如果已经称为泛型对象了,那说明泛型类已经实例化成实际的类了,通过实例化的类实例化的对象才叫泛型对象吧。 template<class T> class TT :public T { void Serialize(){ T::Serialize(); } }[/quote] 你这是抠字眼了,这其实就是个模版函数
ID870177103 2015-09-24
  • 打赏
  • 举报
回复
template <typename T>
class A {
private :
	T a ;

public :
	inline A () {}

	inline A (const T &a) :a (a) {}

#ifdef _IOSTREAM_
	friend inline istream &operator>> (istream &is ,A &a) {
		return is >> a.a ;
	}

	friend inline ostream &operator>> (ostream &os ,const A &a) {
		return os << a.a ;
	}
#endif
} ;
比如说Xml类函装Xml操作,而你想让Xml类能操作类M 无非是通过接口或者友元重载 ,这样让Xml操作M的函数是由M类给出 这样怎么会有模板参数的问题呢,如上例 换过来想,如果M没有实现Xml接口,Xml也没有对M的操作,让第三方搭桥,有这样的设计吗?
cooaa 2015-09-24
  • 打赏
  • 举报
回复
这个需要定义宏,然后使用模板。
勤奋的小游侠 2015-09-24
  • 打赏
  • 举报
回复
引用 9 楼 Razor87 的回复:
[quote=引用 8 楼 lovesmiles 的回复:] 泛形类对像也要实例化的。 如果用参数<T>来实例化某个泛形类,当实例化后,它就是一个一般的类。 用递归的方法,将泛形类分解成已知的类,而这些已知类是可以序列化的。 就相当于叠积木,既然每个积木都可以序列化,那它们的任意组合也可以序列化。
将泛型类分解成已知的类,是什么意思?[/quote] 泛型终究要被实例化
lookupheaven 2015-09-23
  • 打赏
  • 举报
回复
引用 1 楼 sdghchj 的回复:
不明白考点在哪。能先说说非泛型对象怎么序列化么
这就是问题啊,你把序列化理解成保存到xml文档中就成,用哪个xml库都无所谓。 我现在能想到的就是给泛型对象实现一个保存xml文档的接口,在序列化的时候直接调用, 否则我实在想不出来如何去遍历一个泛型对象的成员。
sdghchj 2015-09-23
  • 打赏
  • 举报
回复
不明白考点在哪。能先说说非泛型对象怎么序列化么
sdghchj 2015-09-23
  • 打赏
  • 举报
回复
引用 2 楼 Razor87 的回复:
[quote=引用 1 楼 sdghchj 的回复:] 不明白考点在哪。能先说说非泛型对象怎么序列化么
这就是问题啊,你把序列化理解成保存到xml文档中就成,用哪个xml库都无所谓。 我现在能想到的就是给泛型对象实现一个保存xml文档的接口,在序列化的时候直接调用, 否则我实在想不出来如何去遍历一个泛型对象的成员。[/quote] 我想说的是,纯泛型会有对象么?能实例化么?如果已经称为泛型对象了,那说明泛型类已经实例化成实际的类了,通过实例化的类实例化的对象才叫泛型对象吧。 template<class T> class TT :public T { void Serialize(){ T::Serialize(); } }
mujiok2003 2015-09-23
  • 打赏
  • 举报
回复

class xml_input_stream;
class xml_output_stream;


 xml_input_stream& operator >>( xml_input_stream, int& v);
 xml_output_stream& operator <<( xml_output_stream, int v);
.....

int x = 5;
xml_output_stream xos  = ....;
xos << 5;

...
int y;
xml_input_stream xis  = ....;
xis >> 5;

运算符重载吧, 就如同C++ 标准输入输出流。
lookupheaven 2015-09-23
  • 打赏
  • 举报
回复
引用 3 楼 sdghchj 的回复:
[quote=引用 2 楼 Razor87 的回复:] [quote=引用 1 楼 sdghchj 的回复:] 不明白考点在哪。能先说说非泛型对象怎么序列化么
这就是问题啊,你把序列化理解成保存到xml文档中就成,用哪个xml库都无所谓。 我现在能想到的就是给泛型对象实现一个保存xml文档的接口,在序列化的时候直接调用, 否则我实在想不出来如何去遍历一个泛型对象的成员。[/quote] 那跟泛型有什么关系?非泛型也是这样啊[/quote] 因为你不知道泛型对象的成员列表,ok?
sdghchj 2015-09-23
  • 打赏
  • 举报
回复
引用 2 楼 Razor87 的回复:
[quote=引用 1 楼 sdghchj 的回复:] 不明白考点在哪。能先说说非泛型对象怎么序列化么
这就是问题啊,你把序列化理解成保存到xml文档中就成,用哪个xml库都无所谓。 我现在能想到的就是给泛型对象实现一个保存xml文档的接口,在序列化的时候直接调用, 否则我实在想不出来如何去遍历一个泛型对象的成员。[/quote] 那跟泛型有什么关系?非泛型也是这样啊

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧