Я знаю, что 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
.
Кто-нибудь знает, как это сделать?