C++でVARIANT配列を扱う

COMで使用するVARIANT配列を生成するコンパクトな実装コードです。 ATL使用が前提で,1次元のみ対応しています。

template 
static HRESULT createVariantArray(T* value, int count, VARIANT*& retval) 
{
	SAFEARRAYBOUND sab = { count, 0 };   // 0 〜 count-1
	CComSafeArray sarray(sab);
	for(int n = 0; n < count; ++n) {
		sarray.Add(*value++);
	}
	return CComVariant(sarray).Detach(retval);
}