【发布时间】:2009-06-29 17:33:00
【问题描述】:
我有一个 COM 接口,需要向它添加一个访问器方法。返回值实际上可以是 4 种类型之一:VARIANT_BOOL、long、BSTR 或 IDispatch 派生接口。
因此我有一个选择:要么返回一个 VARIANT,要么我有 4 种不同的访问方法返回不同的类型。
interface IValue1 {
HRESULT GetType( TypeEnum* );
HRESULT GetValue( VARIANT* );
};
或
interface IValue2 {
HRESULT GetType( TypeEnum* );
HRESULT GetLongValue( long* );
HRESULT GetBstrValue( BSTR* );
HRESULT GetBoolValue( VARIANT_BOOL* );
HRESULT GetInterfaceValue( ICustomInterface** );
}
为了清楚起见,无论如何我都会有 IValueX::GetType。如果我选择后一个选项,只有 4 个访问器中的一个会实际返回值,所有其他访问器都会因为类型不匹配而指示错误。
我需要尽可能广泛的客户端使用此接口 - 包括 VB6、Perl、.NET。
哪种选择更好 - 使用 VARIANT 还是使用不同的类型?
【问题讨论】: