我尝试编写抽象结构形状,并且我需要派生类中的函数来计算从射线原点到我的形状的距离。我使用here中的函数,它们返回不同的类型。我这样做是因为稍后我需要将这些形状存储在 BasePrimitive 向量中。有什么好办法吗
struct Shape {
virtual void* Intersect(const vec3& ro, const vec3& rd) = 0; // ro - rayOrigin, rd - rayDirection
};
struct Sphere : public Shape {
vec3 ce; // center
float ra; // radius
vec2 Intersect(const vec3& ro, const vec3& rd) override {
// some code
}
};
我尝试通过 void* 来做到这一点,但是当我插入 void* 时,我收到错误“返回类型与重写的虚函数“Shape::Intersect”的返回类型“void *”不相同,也不协变。
如果您想要一个可以返回任何类型的函数,一种选择是执行以下操作:
#include <any>;
#include <string>
std::any f(int i)
{
switch (i)
{
case 1:
return 1.5;
break;
case 2:
return std::string("Pluto");
break;
default:
return 0;
}
}
int main()
{
const auto a = std::any_cast<double>(f(1));
const auto b = std::any_cast<std::string>(f(2));
const auto c = std::any_cast<int>(f(3));
}