включить члена класса в зависимости от шаблона

Я уже знаю, что вы можете включить (или нет) метод класса, используяstd::enable_if

например:

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

  ...
};

Это помогает не вызывать функции, которые являются недопустимыми в конкретном случае, а также устраняет ошибки перегрузки ... что, на мой взгляд, очень приятно!

Я хотел бы пойти дальше и сделать так, чтобы некоторые из членов моего класса присутствовали, только если это необходимо. Таким образом, я получу ошибку, если попытаюсь использовать возражение, которое в противном случае не было бы инициировано.

Я пытался сделать

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

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

Но компилятор говорит мне:

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

Есть ли способ добиться того, чего я хочу?

Ответы на вопрос(2)

Ваш ответ на вопрос