如何实现constexpr伪多态?

时间:2018-10-04 13:31:12

标签: c++ c++17 variant parametric-polymorphism

在一个我试图使编译时(constexpr)充满乐趣和挑战的光线跟踪项目中,我遇到了一个问题:我有一个对象(交叉点)需要引用一个一组其他对象(形状)。

现在,我的理解是,由于要进行vtable查找,因此无法在constexpr中使用多态/虚拟方法,据我所知,我不能有其他类派生的超类Shape。因此,我需要将Intersection设置为包含其形状之一的模板类。

不幸的是,我需要将这些Intersection类存储在数组或其他容器中,并且我希望能够在它们及其形状上调用一个通用函数,即伪多态性的来源。

我实现了一些解决问题的方法,在std::array中使用std::variant,在每次添加到数组时,如果类型std::variant中没有任何内容,然后将其展开。我还可以通过使用std::visit并在每个元素上调用一个通用名称的函数来生成std::array个最终元素来实现伪多态。

我的实现就在这里。我认为发布太久了:

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

现在,众所周知,解决问题的难度比必要的困难得多,所以我想知道你们中的任何人是否知道实现这一目标的简单方法?

0 个答案:

没有答案