Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: error "explicit specialization in non-namespace scope"

Tags:

c++

templates

template<typename T1, typename T2>
class Bimap {
public:
    class Data {
    private:
        template<typename T> Data& set(T);
        template<> Data& set<T1>(typename T1 v) { /*...*/ }
    };
};

That gives me the error:

error: explicit specialization in non-namespace scope 'class Bimap<T1, T2>::Data'

I understand what the error is saying. But why I can't I do this? And how can I fix it?

like image 710
Albert Avatar asked Sep 19 '10 16:09

Albert


1 Answers

One way forget templates, overload:

Data& set(T1 v) { /*...*/ }

but here is a trick which I use sometimes

you can specialize class template within class:

class {
    template<typename T>
    struct function_ {
        static void apply(T);
    };

    template<>
    struct function_<int> {
        ...
    };

    template<typename T>
    void function(T t) { return function_<T>::apply(t); }
like image 122
Anycorn Avatar answered Oct 17 '22 02:10

Anycorn