habilitar el miembro de la clase según la plantilla
Ya sé que puedes habilitar (o no) el método de una clase usandostd::enable_if
por ejemplo:
template<size_t D, size_t E>
class Field
{
...
size_t offset(const std::array<float,D>& p) const
{
...
}
template<typename TT = size_t>
typename std::enable_if<D!=E, TT>::type
offset(const std::array<float,E>& p) const
{
return offset(_projection(p));
}
...
};
Esto ayuda a no poder llamar a funciones que no son válidas en un caso específico, así como a eliminar los errores de sobrecarga ... ¡lo cual, para mí, es muy bueno!
Me gustaría ir más allá y hacer que algunos de los miembros de mi clase estén presentes solo si es necesario. De esa forma, obtendría un error si intento utilizar un objeto objetado que de otro modo no se hubiera iniciado
Intenté hacer
template<size_t D, size_t E>
class Field
{
...
template<typename TT = projectionFunc>
typename std::enable_if<D!=E, TT>::type _projection;
}
Pero el compilador me dice:
erreur: data member ‘_projection’ cannot be a member template
¿Hay alguna forma de lograr lo que quiero?