【发布时间】:2013-05-31 06:01:02
【问题描述】:
我正在从事一个个人项目,以熟悉 C++11 和 Boost。
我与UrlExtractor 基类、TagUrlExtractor 派生类和CompoundExtractor 派生类有继承关系。一个CompoundExtractor可以包含任意数量的UrlExtractors,从而实现composite pattern。
我很好奇CompositeExtractor.addExtractor 的方法签名应该是什么样子。由于我正在处理多态类型,因此我不得不使用指针(或引用)。我想使用新的智能指针,特别是shared_ptr。
我尝试像这样编写addExtractor 成员函数:
void addExtractor(shared_ptr<UrlExtractor> extractor);
但是,如果我尝试编写,则会出现编译错误:
compound.addExtractor(new TagUrlExtractor());
问题在于创建shared_ptr<UrlExtractor> 需要两次隐式转换:一次转换为UrlExtractor 基类,第二次转换为shared_ptr。
我可以这样调用函数:
compound.addExtractor(shared_ptr<UrlExtractor>(new TagUrlExtractor));
但是,这非常冗长。这种情况一般是怎么处理的?
【问题讨论】:
标签: c++ inheritance c++11 shared-ptr composite