我有以下结构:
template <typename T>
struct Odp
{
T m_t;
};
我想对其进行专门化,因此可以添加一个运算符,以便该类型与STL集很好地配合使用。 (我不能直接修改
Odp
;它是旧版代码。)我看到了这样做的两种方法:struct Ftw : public Odp<int>
{
bool operator==(const Ftw& rhs)
{
return m_t == rhs.m_t;
}
};
struct FtwContain
{
Odp<int> odp;
bool operator==(const FtwContain& rhs)
{
return odp.m_t == rhs.odp.m_t;
}
};
有什么理由比第二个更喜欢第二个吗?第一种方法似乎允许使用更干净的代码:
Ftw ftw;
ftw.m_t = 2;
FtwContain ftwContain;
ftwContain.odp.m_t = 2;
(此外,我对“模板专业化”一词的含义感到困惑。)
最佳答案
我认为不需要创建新类型-只需编写一个自由函数即可:
template <typename T>
bool operator==( const Odp<T> & a, const Odp <T> & b ) {
return a.m_t == b.m_t;
}
关于c++ - C++:继承v。模板化类的包含,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3407541/