Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
442 views
in Technique[技术] by (71.8m points)

c++ - Specialization of templated member function in templated class

I have a templated class with an templated member function

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

Now I want to specialize the templated member function in 2 ways. First for having the same type as the class:

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

Second for type bool:

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

Here is how I am trying to test it:

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

Now gcc gives me for the line marked above:

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

So gcc is telling me, that I have to specialize A, if I want to specialize function, right? I do not want to do that, I want the type of the outer class to be open ...

Is the final answer: it is not possible? Or is there a way?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Yes, this is the problem:

error: enclosing class templates are not explicitly specialized 

You cannot specialize a member without also specializing the class.

What you can do is put the code from function in a separate class and specialize that, much like basic_string depends on a separate char_traits class. Then then non-specialized function can call a helper in the traits class.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...