C++:错误"非命名空间范围中的显式特化"

Alb*_*ert 9 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) { /*...*/ }
    };
};
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

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

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

Any*_*orn 14

一种方法忘记模板,重载:

Data& set(T1 v) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

但这是我有时使用的一个技巧

你可以在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); }
Run Code Online (Sandbox Code Playgroud)

  • 你*可以*在*普通*类中明确地专门化一个嵌套的类模板.但是你*不能*在另一个*类模板*中明确地专门化嵌套类模板.执行后者的唯一方法是明确地专门化*封闭模板和嵌套模板. (4认同)