habilitar o membro da classe dependendo do modelo
Eu já sei que você pode habilitar (ou não) o método de uma classe usandostd::enable_if
por exemplo:
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));
}
...
};
Isso ajuda a não poder chamar funções inválidas em um caso específico, além de remover erros de sobrecarga ... o que, para mim, é muito bom!
Gostaria de ir além e fazer com que alguns dos membros da minha classe estejam presentes apenas se necessário. Dessa forma, eu receberia um erro se tentasse usar uma objeção que de outra forma não teria sido iniciada
Eu tentei fazer
template<size_t D, size_t E>
class Field
{
...
template<typename TT = projectionFunc>
typename std::enable_if<D!=E, TT>::type _projection;
}
Mas o compilador me diz:
erreur: data member ‘_projection’ cannot be a member template
Existe alguma maneira de conseguir o que eu quero?