本文介绍了C ++:error“在非命名空间范围中的显式专门化”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

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

这给我错误:

错误:非命名空间范围中的显式专门化'class Bimap< T1,T2> :: Data'

I理解错误的含义。但为什么我不能这样做?

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

推荐答案

单向忘记模板,重载:

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

使用有时

可以在类中专门化类模板:

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); }

这篇关于C ++:error“在非命名空间范围中的显式专门化”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-08 18:18