我正在尝试做一些部分专业化的东西。我有一个tuple
,我想从某个元素索引迭代到第一个元组索引,从tuple
. 这似乎是使用递归模板实例化的简单问题。
问题是,我似乎无法让递归工作。为了停止递归,我需要在元组索引 0 处部分专门化模板函数。这看起来很简单,但它不起作用。
注意:我已经tuple
从示例中删除了实际内容,因为它无关紧要;这是模板专业化不起作用。
template<int Index, typename Tpl>
size_t CalcInterleaveByteOffset(const Tpl &t)
{
size_t prevOffset = CalcInterleaveByteOffset<Index - 1>(t);
return prevOffset + sizeof(Tpl);
}
template<typename Tpl>
size_t CalcInterleaveByteOffset<0, Tpl>(const Tpl &t)
{
return 0;
}
GCC 只是说不允许这种专业化。真的吗?有没有其他方法来处理这种事情?