我们的代码库有很多 COM 对象,所以通常我们会有类似的东西:
//this is the IDL-generated IGetTime interface header
#include "gettime.h"
//our COM class implementation of IGetTime
class CGetTime : public IGetTime
{
public:
CGetTime(CGetTimeCF &factory,...); //COM-specific constructor params
/* IUnknown */
STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR * ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
/* IGetTime */
STDMETHODIMP GetTheTime(); //
};
构造函数和其他一些东西的设置方式,这个类只能通过 COM 轻松使用......你可以破解一种创建对象的方法,但它往往是不稳定的。在很多情况下,该类的实际功能可能在没有 COM 的情况下可用......如果你可以这样做,这也将更容易测试new CGetTime();
我想知道是否有这样的模式:
class CGetTimeBase
{
public:
STDMETHODIMP GetTheTime();
};
class CGetTime : public IGetTime, public CGetTimeBase
{
...
};
这是一个好方法,还是有更好的方法让“普通 C++”类提供核心功能,而 COM 类做 COM 的东西?为了尽量减少要编写的代码量,我认为我宁愿不引入包装方法,而是在非 COM 类中拥有实际的实现方法,因此它会自动出现在 COM 类中。
想法?};