Я имею следующую структуру:C++. Наследование v Сдерживание для Шаблонного класса
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 <> struct Odp {long m_t;};' означает, что 'Opd ' будет содержать 'long', а не' int'. –