+ -
当前位置:首页 → 问答吧 → 模板不会代码膨胀的小技巧——EffectiveC++条款42

模板不会代码膨胀的小技巧——EffectiveC++条款42

时间:2010-06-28

来源:互联网

本帖最后由 xyfree 于 2010-06-28 15:40 编辑

要点,void* 指针,私有继承,保护构造函数,inline
  1. class GenericStack {
  2. protected:
  3.   GenericStack();
  4.   ~GenericStack();

  5.   void push(void *object);
  6.   void * pop();

  7.   bool empty() const;

  8. private:
  9.   struct StackNode {
  10.   void *data;                    // 节点数据
  11.     StackNode *next;               // 下一节点

  12.     StackNode(void *newData, StackNode *nextNode)
  13.     : data(newData), next(nextNode) {}
  14.   };

  15.   StackNode *top;                          // 栈顶

  16.   GenericStack(const GenericStack& rhs);   // 防止拷贝和
  17.   GenericStack&                            // 赋值(参见
  18.     operator=(const GenericStack& rhs);    // 条款27)
  19. };


  20. template<class T>
  21. class Stack: private GenericStack {
  22. public:
  23.   void push(T *objectPtr) { GenericStack::push(objectPtr); }
  24.   T * pop() { return static_cast<T*>(GenericStack::pop()); }
  25.   bool empty() const { return GenericStack::empty(); }
  26. };
复制代码

作者: xyfree   发布时间: 2010-06-28

除了ow跟国外那哥们儿,没几个人能明白C++的高级特性和内幕,你别费劲了。

作者: prolj   发布时间: 2010-06-28

本帖最后由 xyfree 于 2010-06-28 16:33 编辑

回复 prolj


    你不就明白了吗?
    我只是来发帖赚分的,嘿嘿

    PS,这帖就是给那俩看的,告诉他们写VimE用C写优势不太多

作者: xyfree   发布时间: 2010-06-28

...................

作者: ah13k   发布时间: 2010-06-28

鄙视C++

作者: ypyf3000   发布时间: 2010-06-28

本质的技巧是这个:
《从模板中分离出参数无关的代码》
http://dev.yesky.com/392/2249392.shtml


让所有指针类型元素共用一个底层实现是"分离参数无关代码"的一个体现。

作者: OwnWaterloo   发布时间: 2010-06-28

回复 xyfree

你去劝他……   我是随波逐流型的……
别用java就行……

作者: OwnWaterloo   发布时间: 2010-06-28