【发布时间】:2026-01-26 21:55:01
【问题描述】:
我正在尝试为具有编译时间常数的模板类构建特化。
模板类如下所示:
template<class TNativeItem, class TComItem = void,
VARTYPE _vartype = _ATL_AutomationType<TComItem>::type>
class InOutComArray
{
private:
CComSafeArray<TComItem, _vartype> _safeArray;
// ...
public:
InOutComArray(
TNativeItem* items, size_t length,
std::function<TComItem(const TNativeItem&)> convertToCom,
std::function<TNativeItem(const TComItem&)> convertFromCom)
: _safeArray(length)
{
// ...
}
// ...
};
用法例如:
InOutComArray<BOOL, VARIANT_BOOL, VT_BOOL>(
items, length, BOOLToVARIANT_BOOL, VARIANT_BOOLToBOOL));
但是,也存在不需要转换的类型,我想为此提供一个简写版本:
InOutComArray<LONG>(items, length);
我尝试这样实现它:
template<class TItem, VARTYPE _vartype = _ATL_AutomationType<TItem>::type>
class InOutComArray<TItem, void, _vartype>
: public InOutComArray<TItem, TItem, _vartype>
{
public:
InOutComArray(TItem* items, size_t length)
: InOutComArray<TItem, TItem, _vartype>(
items, length, NoConverter<TItem>, NoConverter<TItem>)
{
}
};
但是,我收到以下错误:
'_vartype' : 部分特化不允许使用默认模板参数
有什么办法吗?
【问题讨论】:
-
报错信息很清楚。
-
@40two 你的评论没有帮助。我专门询问了一种绕过该错误消息的方法。