4
我知道boost::variant
使用boost::mpl
后面的东西,并具有mpl兼容typedef types
。C++助推变体问题
比方说,我有一个简单的typedef:typedef boost::variant<bool, int> Variant;
现在我有另一个模板的功能,让我们说:
template <typename T> T function() {
// ...
}
我想这个函数来执行不同的两种情况:当T
的一部分Variant::types
以及什么时候没有。
很显然,我必须这样做
template <typename T>
typename boost::enable_if<CONDITION, T>::type function() {
// Implementation for the case T is in Variant::types
}
template <typename T>
typename boost::disable_if<CONDITION, T>::type function() {
// Implementation for the case T is ***NOT*** in Variant::types
}
我不知道的唯一的事情是这样的CONDITION
。
现在 - 如果T
是Variant::types
的一部分,我认为可以进行编译时查询。
是否有人知道如何?
+1。由于问题标记为C++而非C++ 0x,因此您可能需要添加有关“using”语法的注释。另外,你是不是故意在'boost :: mpl :: contains'中写'Variant :: types'而不是'Variant'? – sellibitze 2010-09-24 19:34:39
@sellibitze:感谢您检查代码:-) – 2010-09-24 20:53:16