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?

questionAnswers(2)

yourAnswerToTheQuestion