Я знаю, что boost::variant
использует boost::mpl
материал позади него и имеет mpl-совместимый typedef types
.C++ boost вариант вопрос
Скажем, у меня есть простой ЬурейеЕ: 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'. Кроме того, вы не хотели писать 'Variant :: types' вместо' Variant' в 'boost :: mpl :: contains'? – sellibitze
@sellibitze: спасибо за тщательный анализ кода :-) –