宏的应用

今天粗略的看了下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

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

posted @ 2013-03-02 08:05  westfly  阅读(193)  评论(0编辑  收藏  举报