下面的代码如何检测两个类是否相同?特别是我没有获得语法第二个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时,如果模板参数匹配部分专用化(即,如果两个参数都表示相同的类型),则将实例化该部分专用化,并且该函数返回其sametrue。否则,将实例化主模板,并且函数返回false

09-30 08:49