Nic*_*ner 0 c++ templates coding-style specialization
我有以下结构:
template <typename T>
struct Odp
{
T m_t;
};
Run Code Online (Sandbox Code Playgroud)
我想专门化它,所以我可以添加一个运算符,以便类型与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;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有理由比第一个更喜欢第二个?第一种方法似乎允许更清晰的代码:
Ftw ftw;
ftw.m_t = 2;
FtwContain ftwContain;
ftwContain.odp.m_t = 2;
Run Code Online (Sandbox Code Playgroud)
(另外,我很可能对"模板专业化"这个术语的含义感到困惑.)
小智 7
我不相信有任何需要创建一个新类型 - 只需编写一个自由函数:
template <typename T>
bool operator==( const Odp<T> & a, const Odp <T> & b ) {
return a.m_t == b.m_t;
}
Run Code Online (Sandbox Code Playgroud)