我们可以使用get<i>(var)
来获取boost :: variant的ith
类型,其中i
通常是编译时已知的常量。但是,在某些情况下,i
仅在运行时期间已知。例如:
void do_process(int i, boost::variant<int, double, string>& var) {
// How can I get the underlying type of var based on i?
}
这里的目的是实现序列化/反序列化接口,而对于序列化,我实际上可以使用visitor
因为已知序列化的对象。对于deserialization
,看起来我能做的唯一方法是从类型索引(var.which()
)和存储数据中提取数据到基础类型。