【发布时间】:2020-09-06 12:57:08
【问题描述】:
CPU 端的伪代码:
class Sphere {
//some property
}
class Square {
//some property
}
class BVH {
Type type; // save the type of Sphere or Square, or other types.
// But the instance of this class should maintain the same size.
}
可以使用enum 作为类型,然后在 GPU 上检查类型和分支。我已经让它在 GPU 上工作了。但是如果我可以将type 直接保存到这个类中,也许我可以在 GPU 上进行类型转换和使用模板。据我了解,它将减少所有丑陋的分支。
所有逻辑都发生在 GPU 端,CPU 端只是准备数据。 GPU(Metal) 没有超类和虚函数,但支持模板。除非我可以在 GPU 上获得相同的类型,否则最好避免使用任何 std 内容。
【问题讨论】:
-
您在寻找虚函数吗?这个问题对我来说不是很清楚。
-
看来您正在寻找一个歧视性工会。在现代 C++ 中,您可以使用 std::variant
-
你能解释一下你到底想要完成什么吗?感觉就像一个 XY 问题,知道你在做什么可能有助于答案
-
Metal 不支持虚函数@StephenNewell
-
是的,请澄清。我只是说你标记了模板。如果您想在
BVH中存储Sphere或Square的实例,您当然可以使用template <typename T> BVH { T instance; }(从问题中不太清楚,你说你想存储类型,但我想你想要存储对象)。然而BVH<Sphere>和BVH<Square>是两个完全不相关的类型,现在还不清楚你真正需要什么......