C++: error “explicit specialization in non-namespace scope”

前端 未结 2 2193
情深已故
情深已故 2021-02-20 11:12
template
class Bimap {
public:
    class Data {
    private:
        template Data& set(T);
        template<>         


        
相关标签:
2条回答
  • 2021-02-20 11:23

    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); }
    
    0 讨论(0)
  • 2021-02-20 11:36

    @Albert

    I had a similar problem when I wanted to add a "trim-excess-capacity" to a custom made container. The std::vector swap trick and changing the declaration of the existing container were not valid options. So I've come up with this:

    template <class T, bool isPtr> struct DeleteImp
    {
        static void Trim(T* to, unsigned int count);
    };
    
    template <class T> struct DeleteImp<T, false>       
    {
        static void Trim(T* to, unsigned int count) {}
    };
    
    template <class T> struct DeleteImp<T, true>        
    {
        static void Trim(T* to, unsigned int count)
        {
            for(unsigned int i=0; i<count; i++)
                delete to[i];
        }
    };
    

    used by my container like this:

    DeleteImp<T, TypeTraits<T>::isPointer>::Trim(buf + length, truelength-length);
    

    You may also want to check out this resource.

    0 讨论(0)
提交回复
热议问题