我需要一系列使用可变数量值的初始化函数。我正在使用它们来实现与 Eigen 库的收集操作。这是我现在使用每个向量长度的一个模板的方式:
template<typename T1, typename T2>
inline void gather (Array<T1,4,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,4,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]];
}
template<typename T1, typename T2>
inline void gather (Array<T1,6,1> &to, const Array<T2,Dynamic,1> &from, const Array<int,6,1> &index)
{
to << from[index[0]], from[index[1]], from[index[2]], from[index[3]], from[index[4]], from[index[5]];
}
有没有办法用长度参数参数化的单个模板(上面的代码片段中的 4 和 6)替换上面的更长的模板列表?如果是这样,是否可以使用 C++11 之前的语言规范来完成(我使用的是 Visual Studio 2010)?
我想保留逗号分隔值的语法,因为我希望它在某些情况下会产生编译时初始化(constfrom
和index
)。不过,我的这个假设可能是错误的。初始化列表可以有 1 到 16 个值 - 无需担心空列表。