我正在从事一个个人项目,以熟悉 C++11 和 Boost。
我与UrlExtractor
基类、TagUrlExtractor
派生类和CompoundExtractor
派生类有继承关系。ACompoundExtractor
可以包含任意数量的UrlExtractors
,从而实现复合模式。
我很好奇方法签名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));
但是,这非常冗长。这种情况一般如何处理?