假设我有一个API,其中有2种方法可以相互结合使用:
boost::shared_ptr<IAsset> getAsset( const std::string & id );
void update( const Asset & asset );
我在另一个类中有一个
boost::shared_ptr<Asset> asset
的成员变量。如果我做:asset = otherObject->getAsset("first_asset");
// do some stuff
otherObject->update( *asset );
我收到以下错误:
\boost\include\boost/smart_ptr/shared_ptr.hpp(378): error C2440: '<function-style-cast>' : cannot convert from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'
with
[
T=IAsset
]
and
[
T=Asset
]
No constructor could take the source type, or constructor overload resolution was ambiguous
src\TestMethod.cpp(35) : see reference to function template instantiation 'boost::shared_ptr<T> &boost::shared_ptr<T>::operator =<IAsset>(boost::shared_ptr<IAsset> &&)' being compiled
with
[
T=Asset
]
\boost\include\boost/smart_ptr/shared_ptr.hpp(378): error C2228: left of '.swap' must have class/struct/union
在这里我应该注意,
Asset
的类定义确实像IAsset
那样扩展了class Asset : virtual public IAsset {...}
。有人可以告诉我执行此操作的正确方法,因为我无法访问基础API?
最佳答案
我认为您对继承的使用是不正确的。如果update
需要Asset
,则您需要向其发送Asset
或其子类。 IAsset
是超类。
关于c++ - boost shared_ptr接口(interface)/对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10175369/