【发布时间】:2014-11-20 17:08:05
【问题描述】:
说我有:
typedef boost::variant<int, float, std::string> moog;
给定一个moog 的实例,我可以获得.which() 的类型,例如:
moog foo = ...;
foo.which(); //0 for int, 1 for float, 2 for std::string
在给定类型本身的情况下,获取.which() 的最佳方法是什么?例如类似:
moog.MAGIC<int>(); // 0
moog.MAGIC<float>(); // 1
moog.MAGIC<std::string>(); // 2
我想我可以实例化一个 moog 并这样做(未经测试,仅示例):
template <class Variant, class Which>
size_t MAGIC() {
Which w;
Variant foo = w;
return foo.which();
}
MAGIC<moog, int>(); // 0
MAGIC<moog, float>(); // 1
MAGIC<moog, std::string>(); // 2
但是,这很笨拙,因为它需要实例化两个对象。它也不适用于没有默认构造函数的类。
【问题讨论】:
标签: c++ templates boost variant