关于嵌入结构名称本身的c ++混淆

时间:2015-07-15 21:25:58

标签: c++ inheritance boost struct

我正在学习提升,这里有一段代码:http://www.boost.org/doc/libs/1_55_0/libs/graph/example/visitor.cpp 我对struct edge_printer的定义感到困惑,它使用了base_visitor的继承,但base_visitor模板的类型名称被指定为edge_printer本身。我可以问一下C ++中的内容是什么吗?

template <class Tag>
struct edge_printer : public base_visitor<edge_printer<Tag> > {
  typedef Tag event_filter;
  edge_printer(std::string edge_t) : m_edge_type(edge_t) { }
  template <class Edge, class Graph>
  void operator()(Edge e, Graph& G) {
    std::cout << m_edge_type << ": " << source(e, G) 
              << " --> " <<  target(e, G) << std::endl;
  }
  std::string m_edge_type;
};
template <class Tag>
edge_printer<Tag> print_edge(std::string type, Tag) { 
  return edge_printer<Tag>(type);
}

1 个答案:

答案 0 :(得分:1)

这称为混合。请参阅CRTPthis post on mixins