acl  3.5.3.0
final_tpl.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 
4 namespace acl {
5 
6 #if defined(_WIN32) || defined(_WIN64)
7 template<typename TDerive, typename TProvider>
8 class final_tpl_base
9 {
10  friend TDerive;
11  friend TProvider;
12 private:
13  final_tpl_base() {}
14  ~final_tpl_base() {}
15 };
16 #else
17 template <typename T>
18 class identity
19 {
20 public:
21  typedef T me;
22 };
23 
24 template<typename TDerive, typename TProvider>
26 {
27  friend class identity<TDerive>::me;
28  friend class identity<TProvider>::me;
29 private:
30  final_tpl_base() {}
31  ~final_tpl_base() {}
32 };
33 #endif
34 
35 /*
36  * 提供禁止派生的功能,需要此功能的类可以从final_tpl派生,
37  * 并将类名作为模板参数传递
38  * @example:
39  * class my_final_class : public acl::final_tpl <my_final_class>
40  * {
41  * public:
42  * my_final_class() {}
43  * ~my_final_class() {}
44  * }
45  * 这样就保证了 my_final_class 是不能被继承的
46  */
47 template<typename TFinalClass>
48 class final_tpl : virtual public final_tpl_base<TFinalClass,
49  final_tpl<TFinalClass> >
50 {
51 public:
52  final_tpl() {}
54 };
55 
56 }