淘客熙熙

主题:【文摘】二月春风--关于编程的,不喜勿进 -- 柚子

共:💬20 🌺7 新:
分页树展主题 · 全看首页 上页
/ 2
下页 末页
  • 家园 【文摘】二月春风--关于编程的,不喜勿进

    外链出处

    • 家园 我最喜欢的关于c++编程的书

      Advanced C++ Programming Styles and Idioms, by James Coplien。十来年的老书了,真经典也。不过当时学了一堆OO的花拳绣腿唬人,现在最多用c写写网络和系统内核,这些都忘得差不多了。

    • 家园 更新了,大家看看

      外链出处

      外链出处

    • 家园 好文!

      不过,有点异议,

      现在这个静态的类型安全工厂,有没有缺点呢?有,那就是不能利用思路1,也就是不能随机产生对象,而制作出千奇百怪的植物模型。但是它也许能实现思路2,就是利用一组DNA作为模板,来生成特定模式的植物。

      采用SafeNodeFactory还是可以随机产生对象,不过是再增加一层Abstraction layer而已。

      稍微修改一下NodeFactory到RandomNodeFactory专门用于随机产生Node的case,

      class RandomNodeFactory{

      public:

      static Node* Create(){

      int type=rand()%4;

      switch(type){

      case 0:

      return SafeNodeFactory<Branch>::Create();

      case 1:

      return SafeNodeFactory<Leaf>::Create();

      case 2:

      return SafeNodeFactory<Fruit>::Create();

      case 4:

      return SafeNodeFactory<Flower>::Create();

      default:

      throw runtime_error("unknown type");

      }

      }

      };

      或者简单用一个函数(也可以inline),

      Node* RandomCreate()

      {

      int type=rand()%4;

      switch(type){

      case 0:

      return SafeNodeFactory<Branch>::Create();

      case 1:

      return SafeNodeFactory<Leaf>::Create();

      case 2:

      return SafeNodeFactory<Fruit>::Create();

      case 4:

      return SafeNodeFactory<Flower>::Create();

      default:

      throw runtime_error("unknown type");

      }

      }

      只要把“随机产生”这个逻辑移到上一层即可。

    • 家园 此君乃绝顶高手

      佩服之极,不知有无可能引来河里?

      • 家园 他比较忙, 不过我已经跟他说过了。

        有需要帮忙的话,你可以直接在他的 blog上留言

分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河