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)