- 博客(0)
- 资源 (4)
- 收藏
- 关注
Git详解教程
当下开源社区非常流行的版本管理系统Git的详细系列教程,
学完这个系列教程,Git就能熟练运用了。
Git详解之一 Git起步.doc
Git详解之二 Git基础.doc
Git详解之三 Git分支.doc
Git详解之四 服务器上的Git.doc
Git详解之五 分布式Git.doc
Git详解之六 Git工具.doc
Git详解之七 自定义Git.doc
Git详解之八 Git与其他系统.doc
附录 图解 Git.doc
Git详解之九__Git内部原理.doc
2013-05-21
在C++中侦测内嵌型别的存在.doc
在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)。如果没有,就默认处理。如果有,则再进行更详细的分类。
2009-07-22
61条面向对象设计的经验原则
61条面向对象设计的经验原则
“你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。”
----------Arthur J.Riel
2009-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人