C:错误“非命名空间范围的显式专业化”

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

这给我错误

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

我明白错误在说什么但为什么我不能这样做?我该怎么解决

解决方法

一种方式忘记模板,重载:
Data& set(T1 v) { /*...*/ }

但这里有一些我有时候会使用的技巧

你可以在类中专门设计类模板:

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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...