以下のようなクラス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
のRuntimeClassInitialize
コンストラクターに渡されます。のコード パスがヒットすることはありませんClassB
。RuntimeClassInitialize
これが WRL でクラスを拡張する正しい方法であるかどうか疑問に思っていますか? コードのどこが間違っていますか?