C++中标记的联合(aka变体)具有多次相同的类型

maa*_*tdd 6 c++ boost ocaml variant

我需要创建一个union,但是union的2个成员将具有相同的类型,因此我需要一种方法来识别它们.例如在OCaml中:

type A = 
  | B of int
  | C of float
  | D of float
Run Code Online (Sandbox Code Playgroud)

Boost.Variant似乎不支持这种情况,是否有一个已知的库支持它?

Mar*_*k B 6

如果你想这样做,我认为你最好的选择是将相同但不同的类型包装到一个结构中,然后让boost变体访问正确的结构:

struct Speed
{
    float val_;
};

struct Darkness
{
    float val_;
};
Run Code Online (Sandbox Code Playgroud)

可以使用BOOST_STRONG_TYPEDEF自动执行此操作,但我不确定它是否可以保证生成合法用于联合的类型(尽管在变体中可能会很好).