Esto es lo que quiero lograr. El componente de hoja heredará Component<ParentT>
, otros heredarán Component<ParentT, ChildT>
redeclaración de parámetros de la plantilla
template <typename T>
class Component{
protected:
typedef Component<T> ParentComponentT;
...
};
template <typename ParentT, typename ChildT>
class Component: public Component<ParentT>{
protected:
typedef std::vector<ChildT*> CollectionT;
...
};
Pero el problema es conseguir volver a declarar los parámetros de plantilla. y no puedo mover el segundo primero porque el segundo hereda el primero.
error: redeclared with 2 template parameter(s)
note: previous declaration ‘template class Component’ used 1 template parameter(s)
Ignorando plantillas variadic por el momento, las plantillas tienen un número fijo de parámetros; un solo 'Component <>' no puede tener uno y dos parámetros. Esto se parece mucho a un [problema XY] (http://meta.stackexchange.com/q/66377/166663): ¿qué intentas lograr en realidad? – ildjarn
Entonces, ¿cuál es la buena manera de modelarlo? 'Componente'? –
Eso depende: ¿por qué quieres que la base y el niño tengan el mismo nombre? Dales diferentes nombres de tipo y no tendrás problemas. – ildjarn