Код: Выделить всё
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 ...
}
вытяните структуру и назовите ее явно:
enum class PlanePointPosition { ... };
template struct Plane { ... };
< /code>
Мне не нравится это, потому что у нас были хорошие отношения между структурой и перечислением. Это разрушает это и заменяет его на именованные отношения (а не структурные отношения).
псевдоним перечисление для пользователей
< P> Я мог бы добавить что -то вроде: < /p>
using PlanePointPosition = Plane::PointPosition
< /code>
Это может быть немного лучше, но это немного неясно. Он также страдает от необходимости поддерживать некоторый тип по умолчанию, который всегда доступен, и соответствует требованиям шаблона структуры (которая может быть сложной), чтобы мы могли иметь это. < /P>
Просто оставьте До пользователя
Этот вид отстой. Но мы могли бы просто сделать это, чтобы пользователь должен был выяснить это самостоятельно. Тип без явного использования типа шаблона?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -arguments
Мобильная версия