我有以下结构:

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/

10-10 23:19