如何将从接口派生的类传递给以接口作为参数的函数?
我有一个接口和一个类设置这样的东西。
class Interface
{
public:
virtual ~Interface() {}
virtual void DoStuff() = 0;
};
class MyClass : public Interface
{
public:
MyClass();
~MyClass();
void DoStuff() override;
};
void TakeAnInterface(std::shared_ptr<Interface> interface);
int main()
{
auto myInterface = std::make_shared<MyClass>();
TakeAnInterface(myInterface);
}
编译器抱怨No matching function call to TakeAnInterface(std::shared_ptr<MyClass>&)
。为什么没有功能TakeAnInterface接收Interface类而不是MyClass?
答案 0 :(得分:5)
因为myInterface
是std::shared_ptr<MyClass>
而不是std::shared_ptr<Interface>
的实例,并且这些类不能自动相互转换。
您无法使用std::make_shared
,您必须明确:
auto myInterface = std::shared_ptr<Interface>(new MyClass);