Специализация шаблонной функции-члена в шаблонном классе

У меня есть шаблонный класс с шаблонной функцией-членом

template<class T>
class A {
public:
    template<class CT>
    CT function();
};

Теперь я хочу специализировать шаблонную функцию-член двумя способами. Во-первых, для того, чтобы иметь тот же тип, что и класс:

template<class T>
template<>  // Line gcc gives an error for, see below
T A<T>::function<T>() {
    return (T)0.0;
}

Во-вторых, для типа bool:

template<class T>
template<>
bool A<T>::function<bool>() {
    return false;
}

Вот как я пытаюсь его протестировать:

int main() {
    A<double> a;
    bool b = a.function<bool>();
    double d = a.function<double>();
}

Теперь gcc дает мне для строки, отмеченной выше:

error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize

Итак, gcc говорит мне, что я должен специализироваться на A, если я хочу специализироваться на функции, верно? Я не хочу этого делать, я хочу, чтобы тип внешнего класса был открытым ...

Окончательный ответ: это невозможно? Или есть способ?

18
задан nickie 29 August 2016 в 15:59
поделиться