我有一个类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
的{{1}}构造函数。 <{1}}的{{1}}代码路径永远不会被命中。
我想知道这是否是在WRL中扩展课程的正确方法?我在代码中哪里做错了?
答案 0 :(得分:2)
您需要重写的方法在两个类上都有相同的签名。
此
HRESULT RuntimeClassInitialize(ParamsForClassA);
无法被此
覆盖HRESULT RuntimeClassInitialize(ParamsForClassB);
因为他们采取不同的论点
这是重载,而不是覆盖。
(而这种超载导致Name Hiding)