BOOST :: Метод шаблона класса Enable_if
Вопрос
Я получил класс с шаблонами методов, которые смотрят на это:
struct undefined {};
template<typename T> struct is_undefined : mpl::false_ {};
template<> struct is_undefined<undefined> : mpl::true_ {};
template<class C>
struct foo {
template<class F, class V>
typename boost::disable_if<is_undefined<C> >::type
apply(const F &f, const V &variables) {
}
template<class F, class V>
typename boost::enable_if<is_undefined<C> >::type
apply(const F &f, const V &variables) {
}
};
По-видимому, оба шаблона создаются, что приводит к ошибке времени компиляции. Имеет создание показателей шаблонов, отличных от создания свободных функций? Я исправил это по-другому, но я хотел бы знать, что случилось. Единственное, что я могу придумать, что может привести к тому, что это поведение, позволяющее условие не зависят от немедленного шаблона аргументов, а скорее классовые шаблоны аргументов
Спасибо
Решение
Твой C
не участвует в вычете для apply
. Отказ Видеть Этот ответ Для более глубокого объяснения того, почему ваш код не удается.
Вы можете решить это так:
template<class C>
struct foo {
template<class F, class V>
void apply(const F &f, const V &variables) {
apply<F, V, C>(f, variables);
}
private:
template<class F, class V, class C1>
typename boost::disable_if<is_undefined<C1> >::type
apply(const F &f, const V &variables) {
}
template<class F, class V, class C1>
typename boost::enable_if<is_undefined<C1> >::type
apply(const F &f, const V &variables) {
}
};
Не связан с StackOverflow