c++模版的一个好玩的特性

这个代码展示了private继承和模版的一个妙用:

 1 #include <iostream>
 2 #include <memory>
 3 
 4 template<typename T>
 5 class Counter {
 6 public:
 7     Counter() { count++; }
 8     Counter(const Counter&) { count++; }
 9     ~Counter() { --count; }
10 public:
11     std::size_t howMany(void) { return count; }
12 private:
13     static std::size_t count;
14 };
15 
16 template<typename T>
17 std::size_t Counter<T>::count = 0;
18 
19 class B : private Counter<B> {
20 public:
21     B() { }
22     ~B() { }
23     using Counter<B>::howMany;
24 private:
25     int val;
26 };
27 
28 int main(void)
29 {
30     std::auto_ptr<int> pInt(new int(5));
31 
32     std::cout << *pInt << std::endl;
33     B b1;
34     {
35         B b2;
36         std::cout << b1.howMany() << " " << b2.howMany() << std::endl;
37     }
38 
39     std::cout << b1.howMany() << std::endl;
40 
41     return 0;
42 }

 

posted @ 2013-01-16 16:32  Jojodru  阅读(255)  评论(0编辑  收藏  举报