在C++中侦测内嵌型别的存在.doc

时间:2012-08-11 14:19:11
【文件属性】:

文件名称:在C++中侦测内嵌型别的存在.doc

文件大小:66KB

文件格式:DOC

更新时间:2012-08-11 14:19:11

C++ 模版 动态类型

在C++中侦测内嵌型别的存在 动机(Motivation) 假设一所大学的注册系统提供了一个注册函数: template void Register(T person) { Register(person,typename T::person_tag()); }; 而对于注册者有以下几种标识: struct student_tag{}; struct teacher_tag{}; 还有Register的几个供内部使用的重载版本: template void Register(T p,student_tag){...} //注册学生 template void Register(T p,teacher_tag){...} //注册教师 并规定学生类一定要在内部typedef student_tag person_tag ;教师类typedef teacher_tag person_tag ;这样,当传给起初的那个Register的对象为学生类对象时,typename T::person_tag()其实构造了一个student_tag对象,从而激发函数重载,调用Register内部版本的template void Register(T p,student_tag);版本。其他情况亦均有对应。这是泛型编程里的常用手法,STL里屡见不鲜。 问题是,现在学校里假如不止学生教师,还有工人,警卫等其它人员。如果他们不会在类内部typedef任何东西,则Register需要一种机制以确定T内部是否typedef了某个标识符(例如person_tag)。如果没有,就默认处理。如果有,则再进行更详细的分类。


网友评论