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