下面的代码如何检测两个类是否相同?特别是我没有获得语法第二个IsSame类。它看起来不像显式初始化。请让我知道我应该通过哪个链接来了解这一点?我正在关注Robbert Schildit撰写的《 C++完整参考》。
template<typename A, typename B> struct IsSame {
static const bool same = false;
};
template<typename A> struct IsSame<A, A> {//have confusion here
static const bool same = true;
};
template<typename A, typename B> bool IsSameClass() {
return IsSame<A, B>::same;
}
int main(void)
{
cout << IsSameClass<vector<int>, vector<int>>();//returns 1
cout << IsSameClass<vector<int>, vector<float>>();//returns 0
}
最佳答案
IsSame
的第一个定义是主要模板。第二个是它的部分特化。
当您在IsSame
中使用IsSameClass
时,如果模板参数匹配部分专用化(即,如果两个参数都表示相同的类型),则将实例化该部分专用化,并且该函数返回其same
值true
。否则,将实例化主模板,并且函数返回false
。