本文介绍了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“在非命名空间范围中的显式专门化”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!