Ermöglichen Sie das Mitglied der Klasse abhängig von der Vorlage

Ich weiß bereits, dass Sie die Methode einer Klasse mit @ aktivieren können (oder nichtstd::enable_if

zum Beispiel

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));
  }

  ...
};

Dies hilft nicht nur, in einem bestimmten Fall ungültige Funktionen aufzurufen, sondern auch Überladungsfehler zu beseitigen ... was für mich sehr schön ist!

Ich möchte noch weiter gehen und einige meiner Klassenmitglieder nur dann anwesend machen, wenn sie gebraucht werden. Auf diese Weise würde ich eine Fehlermeldung erhalten, wenn ich versuche, ein Objekt zu verwenden, das andernfalls nicht initiiert worden wäre.

Ich habe versucht, @ zu t

template<size_t D, size_t E>
class Field
{
  ...

  template<typename TT = projectionFunc>
  typename std::enable_if<D!=E, TT>::type _projection;
}

Aber der Compiler sagt mir:

erreur: data member ‘_projection’ cannot be a member template

ibt es eine Möglichkeit, das zu erreichen, was ich wil