Как добиться псевдополиморфизма constexpr?

В проекте трассировки лучей, который я пытаюсь сделать во время компиляции (constexpr) для развлечения и сложности, я столкнулся с небольшой проблемой: у меня есть объект (пересечение), который должен ссылаться на одну из группы других объектов (фигур).

Теперь я понимаю, что вы не можете использовать полиморфизм / виртуальные методы с constexpr из-за поиска в vtable, поэтому, насколько я знаю, у меня не может быть суперкласса, Shape, из которого происходят другие классы. Таким образом, мне нужно сделать Intersection шаблонный класс, который содержит одну из своих форм.

К сожалению, мне нужно хранить эти Intersection классы в массиве или каком-либо другом контейнере, и я хочу иметь возможность вызывать общую функцию для них и их формы, то есть, когда появляется псевдополиморфизм.

Я реализовал что-то, что решает проблему, где я беру std::array из std::variant и всякий раз, когда я добавляю в массив, если тип не представлен ничем в std::variantпотом расширяю. Я также могу достичь псевдополиморфизма с помощью std::visitвызывая обычно именованную функцию для каждого элемента, чтобы привести к std::array конечных элементов.

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

https://gist.github.com/sraaphorst/28998c109f94a78616e7dd488c1491d1

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]