Estoy tratando de hacer algunas cosas de especialización parcial. Tengo un tuple
y quiero iterar desde un determinado índice de elemento hasta el primer índice de tupla, acumulando un valor de cada tipo en el tuple
. Esto parece ser una simple cuestión de usar una instanciación de plantilla recursiva.Especialización parcial de plantillas con parámetros enteros
El problema es que parece que la recursividad no funciona. Para detener la recursión, necesito especializar parcialmente la función de plantilla en el índice de tupla 0. Parecía bastante simple, pero no funciona.
Nota: He eliminado las cosas reales tuple
del ejemplo, ya que es irrelevante; es la especialización de plantillas que no funciona.
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 simply says that this kind of specialization is not allowed. ¿Es eso cierto? ¿Hay alguna otra forma de manejar este tipo de cosas?
podía diferenciar clase diferente con diferentes variables de los miembros de esta manera? ¿Podría adivinar que sí? – GameDeveloper