2
我有一个共享的基类CMyBase,它进一步分为CMyFirst和CMySecond的子类。我如何为客户实现一个工厂接口,以便他们不需要知道使用CComObjects创建了哪些子项?CComObjects的工厂模式
基本上我想要做的是这样的:
CMyBase* CFactory::Create
{
CMyBase* pInst = NULL;
if (something)
{
pInst = new CMyFirst();
}
else
{
pInst = new CMySecond();
}
return pInst;
}
但我怎么能创建一个子COM对象的实例?
CComObject<CMyBase>* CFactory::Create
{
HRESULT hr = E_FAIL;
CComObject<CMyBase>* pInst = NULL;
if (something)
{
hr = CComObject<CMyFirst>::CreateInstance(&pInst); // compiler error (see below)
}
else
{
hr = CComObject<CMySecond>::CreateInstance(&pInst); // compiler error (see below)
}
if (SUCCEEDED(hr))
{
pInst->AddRef();
}
return pInst;
}
我明白为什么会出现此错误,但我该如何做到这一点呢?
error C2664: 'ATL::CComObject<Base>::CreateInstance' : cannot convert parameter 1 from 'ATL::CComObject<Base> *' to 'ATL::CComObject<Base> **'
'CreateInstance'到适当的局部变量,然后返回指针之前铸造。 –