【发布时间】:2013-11-22 19:35:23
【问题描述】:
我刚刚开始使用 boost::variant 并且遇到了一种情况,我想确保模板参数只是变体中允许的类型之一。在阅读了 boost 文档之后,似乎 static_assert、boost::variant::types 和 boost::mpl::contains 的组合应该完全符合我的要求。我已经设法得到一个可行的解决方案,但它看起来相当冗长,我想知道是否有更好的方法来做到这一点。无论如何,我的解决方案是:
typedef boost::variant<int, double, std::string> my_variant;
template<typename T>
void Func()
{
typedef boost::mpl::contains<my_variant::types, T>::type query_t;
typedef boost::mpl::bool_<true>::type query_result_t;
static_assert(boost::is_same<query_t, query_result_t>::value, "T isn't a valid my_variant type.");
// ...
}
不使用 boost::mpl::bool_ 和/或 boost::is_same 是否可以获得相同的效果?
【问题讨论】: