включить члена класса в зависимости от шаблона
Я уже знаю, что вы можете включить (или нет) метод класса, используя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
Есть ли способ добиться того, чего я хочу?