Я знаю, что boost::variant
использует boost::mpl
вещи позади него и имеет mpl-совместимый typedef types
.
Допустим, у меня есть простой 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
.
Кто-нибудь знает как?