使用接口作为共享指针参数

时间:2016-01-07 09:55:57

标签: c++ interface

如何将从接口派生的类传递给以接口作为参数的函数?

我有一个接口和一个类设置这样的东西。

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?

1 个答案:

答案 0 :(得分:5)

因为myInterfacestd::shared_ptr<MyClass>而不是std::shared_ptr<Interface>的实例,并且这些类不能自动相互转换。

您无法使用std::make_shared,您必须明确:

auto myInterface = std::shared_ptr<Interface>(new MyClass);