|
|
C++实现Sealed类 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
[C++实现Sealed类] 今天看到《软件研发5》有一篇译自CUJ的文章“使类不可继承”,方法很好,但有几个毛病: 1. 正如译者说的,还是有办法进行继承,虽然方法有点变态 2. 最主要的毛病却是,这种办法会造成运行时的开销。因为至少会增加VTABLE指针。 所以,针对以上两个问题,作了改动,如下: #ifdef _DEBUG namespace internalSealed { template<typename T> class Class_Is_Sealed { protected: Class_Is_Sealed(){}; }; }; template<typename T> class Sealed: private virtual internalSealed::Class_Is_Sealed<T> { friend typename T; }; #else template<typename T> class Sealed { }; #endif 这样子,在Debug方式下,只要一个类从Sealed<T>继承,就不可再被继承了。 同时,在Release方式下,因为不再检查是否可以被继承,因而不产生开销(空类会被编译器优化掉)。 使用例子: #include "Sealed.h" class test: Sealed<test> { public: int print() { return 1; } }; class ttt: public test //, Sealed<test>, Sealed<ttt> { public: int print() { return 2; } }; int main(int argc, char* argv[]) { test t; printf("%d\n", t.print()); ttt t1; printf("%d\n", t1.print()); return 0; }

|
|
相关文章:相关软件: |
|