成员模板函数特化不要放在 Class Scope

如下面代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Template
{
public:
template<typename T>
Template& operator>>(T& Value)
{
return *this;
}

template<>
Template& operator>><bool>(bool& Value)
{
// do something
return *this;
}
};

声明了模板函数 operator>>,而且添加了一个 bool 的特化,这个代码在 Windows 下编译没有问题,但是在打包 Android 时会产生错误:

1
error: explicit specialization of 'operator>>' in class scope

说时显式特化写在了类作用域内,解决办法是把特化的版本放到类之外:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Template
{
public:
template<typename T>
Template& operator>>(T& Value)
{
return *this;
}
};
template<>
Template& Template::operator>><bool>(bool& Value)
{
// do something
return *this;
}