Сделайте шаблон независимым подтипом доступным без аргументов шаблоновC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сделайте шаблон независимым подтипом доступным без аргументов шаблонов

Сообщение Anonymous »

Представьте, что у меня есть код, как: < /p>

Код: Выделить всё

template 
struct Plane
{
enum class PointPosition  // Highly related to Plane, makes a lot of sense for it to be here
{
InFront, Behind, On
}

E position_of(TPoint p) const {
// ...
}
};
< /code>
Если я хочу позвонить это извне, скажем, у меня есть код: < /p>
void handle(Plane p)
switch (p.position_of(my_point)) {

case Plane::PointPosition::On: // This sucks ...
}
Я действительно хочу просто написать плоскость :: pointposition :: on , но я не могу. Значения перечисления не зависят от шаблона, но привязаны к типу. PointPosition может появиться в других местах и ​​иметь разные значения, зависящие от других способов, которые она используется. Итак, у меня есть некоторые известные параметры:
вытяните структуру и назовите ее явно:
enum class PlanePointPosition { ... };
template struct Plane { ... };
< /code>
Мне не нравится это, потому что у нас были хорошие отношения между структурой и перечислением. Это разрушает это и заменяет его на именованные отношения (а не структурные отношения).
псевдоним перечисление для пользователей
< P> Я мог бы добавить что -то вроде: < /p>
using PlanePointPosition = Plane::PointPosition
< /code>
Это может быть немного лучше, но это немного неясно. Он также страдает от необходимости поддерживать некоторый тип по умолчанию, который всегда доступен, и соответствует требованиям шаблона структуры (которая может быть сложной), чтобы мы могли иметь это. < /P>
Просто оставьте До пользователя
Этот вид отстой. Но мы могли бы просто сделать это, чтобы пользователь должен был выяснить это самостоятельно. Тип без явного использования типа шаблона?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -arguments
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»