重点:
1.模板特例化就是给模板一个特殊的定义。比如正方形是长方形中一种特殊的情况,而这个正方形就是特例化。
2.我们不需要也不能够对特例化的版本进行声明;只能定义它们。由于这是一个定义于头 文件中的全实例化版本,如果有多个编译单 include 了这个头文件,为避免重复定义的错误, 必须将它定义成 inline 的。
class BoolStr
{
private:
std::string value;
public:
BoolStr(std::string const& s) : value(s) {};
template<typename T=std::string>
T get() const
{
return value;
}
};
template<>
inline bool BoolStr::get<bool>() const
{
return value == "true" || value == "on";
}
int main()
{
BoolStr s("hello");
cout << s.get() << endl;
cout << s.get<bool>() << endl;
BoolStr s1("on");
cout << s1.get<bool>() << endl;
return 0;
}