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'到適當的局部變量,然後返回指針之前鑄造。 –