编写没有特定返回类型的纯虚函数的正确方法是什么?

问题描述 投票:0回答:1

我尝试编写抽象结构形状,并且我需要派生类中的函数来计算从射线原点到我的形状的距离。我使用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 *”不相同,也不协变。

c++ void-pointers pure-virtual
1个回答
0
投票

如果您想要一个可以返回任何类型的函数,一种选择是执行以下操作:

#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));
}
© www.soinside.com 2019 - 2024. All rights reserved.