在水木C++版,有人提出如何针对"基类是xx类的类型"进行特化。这里面的关键
是理解这样几件事情:
1. 模板的特化
2. 如何在编译期判断xx是xx的基类
我们使用了这样一个type traits:
1 2 template <typename B, typename D>
3 struct is_base_of
// check if B is a base of D
4 {
5 typedef
char yes[1];
6 typedef
char no[2];
7 8 static yes& test(B*);
9 static no& test(
);
10 11 static D*
get(
void);
12 13 static const bool value =
sizeof(test(
get())) ==
sizeof(yes);
14 };
15
关键是理解struct is_base_of的最后一行,涉及对sizeof的理解: