我正在使用来自 Boost Spirit 的 Qi 来解析 VRML 1.0。有一个名为 Separator 的组节点,在 Separator 下方,可以容纳许多不同类型的节点。AST 基于 Boost.Variant,到目前为止看起来很长。我已接近变体中 20 种类型的限制。我知道我可以扩展变体的类型数量,但我确信必须有更好的方法来设计它。欢迎提出想法。
typedef boost::variant<
Nil,
Coordinate3,
Info,
Material,
MaterialBinding,
Normal,
NormalBinding,
Texture2,
Texture2Transform,
TextureCoordinate2,
ShapeHints,
MatrixTransform,
Rotation,
Scale,
Transform,
Translation,
boost::recursive_wrapper<Separator>
> VRML1Node;