如何将派生自接口的类传递给以接口为参数的函数?
我有一个接口和一个类设置类似这样的东西。
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);
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨No matching function call to TakeAnInterface(std::shared_ptr<MyClass>&)。为什么功能TakeAnInterface不能接收Interface类而不是MyClass?
因为myInterface是std::shared_ptr<MyClass>和不是的实例std::shared_ptr<Interface>,并且类不能自动相互转换。
您不能使用std::make_shared,必须明确:
auto myInterface = std::shared_ptr<Interface>(new MyClass);
Run Code Online (Sandbox Code Playgroud)