3

我有一个类ClassA实现接口IFooBar,如下所示

class ClassA : public Microsoft::WRL::RuntimeClass<IFooBar>
{
public:
    virtual HRESULT RuntimeClassInitialize(ParamsForClassA);
}

现在我想编写一个ClassB固有ClassA的并覆盖它的RuntimeClassInitialize函数,如下所示:

class ClassB : public ClassA
{
public:
    HRESULT RuntimeClassInitialize(ParamsForClassB)
    {
        // implementation goes here
    }
}

我创建了一个指向ClassB对象的指针,如下所示:

ComPtr<ClassB> ptr;
HRESULT hr = MakeAndInitialize<ClassB>(&ptr, ParamsForClassB);

但这实际上是ClassA's 的RuntimeClassInitialize构造函数。的代码路径永远不会被命中ClassBRuntimeClassInitialize

我想知道这是否是在 WRL 中扩展类的正确方法?我在哪里做错了代码?

4

1 回答 1

3

您需要重写的方法在两个类上具有相同的签名。

HRESULT RuntimeClassInitialize(ParamsForClassA);

不能被这个覆盖

HRESULT RuntimeClassInitialize(ParamsForClassB);

因为他们采取不同的论点。
这是一个重载,而不是一个覆盖。(并且这种重载会导致名称隐藏

您可以在此处此处找到有关签名的信息。

于 2014-08-12T09:34:31.423 回答