构造一个包含变体类型索引中第 n 个类型的值的 boost 变体?
我想构造包含默认构造值的 boost::variant
,并使用类型索引指定 - 而无需在类型索引上编写我自己的 switch 语句。
我想这一定可以通过MPL 实现吗?
但需要澄清的是,索引不是编译时常量表达式。
用例是我需要构造一个变体,稍后将其替换为包含正确值的变体,但此时我只知道类型索引。将其视为惰性反序列化问题。
I want to construct boost::variant
s containing default-constructed values, specified with a type index - without writing my own switch statement over the type index.
I figure this must be possible, somehow, with MPL?
To clarify though, the index is not a compile-time constant expression.
The use case is that I need to construct a variant which will later be replaced with one containing the correct value, but at this point I only know the type index. Think of it as a lazy deserialisation problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用
variant::types
typedef。这为您提供了一个 MPL 兼容序列,然后我们可以将其与 mpl::at 和模板一起使用来进行竞价。这可以解决问题:这是运行时变体:
它有点神秘,需要使用可变参数进行一些调整
参数确实是通用的,但它可以满足您的要求。其他人需要弄清楚这是否会产生重大影响
代码爆炸。
You need to use the
variant::types
typedef. This gives you an MPL compatible sequence which we can then use withmpl::at
and a template to do our bidding. This does the trick:Here goes the runtime-variant:
It's a little arcane and will need some tweaking with variadic
arguments to be truly generic, but it does what you want. Someone else needs to figure out if this results in significant
code blow-up.