• 宏的应用


    今天粗略的看了下glog的源代码,发现一处是宏的替换应用,特提出来分享。

    template<class Iter>
    inline void PrintSequence(std::ostream& out, Iter begin, Iter end) {
      using ::operator<<;
      // Output at most 100 elements -- appropriate if used for logging.
      for (int i = 0; begin != end && i < 100; ++i, ++begin) {
        if (i > 0) out << ' ';
        out << *begin;
      }
      if (begin != end) {
        out << " ...";
      }
    }
    #define OUTPUT_TWO_ARG_CONTAINER(Sequence) \
    template<class T1, class T2> \
    inline std::ostream& operator<<(std::ostream& out, \
                                    const Sequence<T1, T2>& seq) { \
      google::PrintSequence(out, seq.begin(), seq.end()); \
      return out; \
    }
    OUTPUT_TWO_ARG_CONTAINER(std::vector)
    OUTPUT_TWO_ARG_CONTAINER(std::deque)
    OUTPUT_TWO_ARG_CONTAINER(std::list)

    在此处宏的作用完全就是字符串替换了,替换完后,就#undef了。

    #undef OUTPUT_TWO_ARG_CONTAINER

    处理非常精妙。
    细处只能去代码里体会。

  • 相关阅读:
    for循环
    条件语句练习
    语句
    语言基础
    python -- 异步IO 协程
    转--python -- 收发邮件
    hive vs hbase
    postgresql 常用速查
    转--利用hexo搭建个人静态博客
    转- --python 3 编码
  • 原文地址:https://www.cnblogs.com/westfly/p/2939655.html
Copyright © 2020-2023  润新知