我有幾個接口,例如IA,IB,IC等等,它們具有共同的特性,例如,現場。我想知道如何重用這些接口的代碼(請保存我在COM聚合上的答案)。ATL COM - 如何重新使用接口方法代碼
當前實現如下:
class CA
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class BA
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class CC
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
我想要什麼來實現的(但不能)如下。
template<typename T>
class SharedProperties
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class CA :
// ATL specific...
SharedProperties<CA>
{
// properties are inherited and are accessible from IC
}
class BA
// ATL specific...
SharedProperties<CB>
{
// properties are inherited and are accessible from IB
}
class CC
// ATL specific...
SharedProperties<CC>
{
// properties are inherited and are accessible from IA
}
我碰到這樣的想法來讀了(http://vcfaq.mvps.org/com/7.htm)之後,但該網站沒有工作的例子,不管我怎樣試圖我無法得到它的工作。我不斷收到「無法實例化抽象類」,因爲純虛函數get_Site和put_Site沒有實現(按照第二個片段)。
編輯 請注意,我用VS2010。示例實現如下:
class ATL_NO_VTABLE CArticle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CArticle, &CLSID_Article>,
public IDispatchImpl<IArticle, &IID_IArticle, &LIBID_GeodeEdiLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CArticle()
{
}
哪個類是抽象的,不能被實例化? – sharptooth
「SharedProperties :: get_Site」和「SharedProperties :: put_Site」不應該是虛擬的嗎? –
他們是,但如果你熟悉ATL我相信你會明白的。該片段不是實際的源代碼。它僅用於說明目的。 – Telemat