椿の日記

たぶんプログラムの話をします

boost::variantでデータ構造を書き換え

boost::variantを利用してシェイプクラスを抽象的にします。

typedef boost::variant<Sphere,Plane> Shape;

enum SHAPE_TYPE
{
    SHAPE_TYPE_SPHERE,
    SHAPE_TYPE_PLANE,
};

struct Scene
{
    std::vector<Shape> shapes;
    std::vector<Vector3> directionalLights;
};

関数型言語に慣れ始めると、こういうデータ構造のほうが扱いやすくて有難い。昔のC++脳だったら間違いなく親クラスでShapeクラスを作ってSphereとかPlaneとかを派生で作っていたところですが…