Рассмотрим следующий фрагмент кода:C++ Шаблоны против агрегации
class B {
private:
// some data members
public:
friend bool operator==(const B&,const B&);
friend ostream& operator<<(ostream&,const B&);
// some other methods
};
template <typename T=B>
class A {
private:
// some data members
vector<vector<T> > vvlist;
public:
// some other methods
};
Моя требование заключается в том, что тип Т, который передается в качестве параметра типа должен обеспечить определения для оператора == и оператор < < методы. Я не хочу применять другие ограничения для T.
Как это сделать?
Один из способов, которым я могу думать, это создать абстрактный класс, который говорит «Z», который объявляет эти два метода.
, а затем написать
vector<vector<Z> > vvlist;
и НЕ имеют класс А в качестве шаблона.
Есть ли лучший способ сделать это?
Просто, чтобы быть ясным: если A использует эти операторы в любом месте, ваш код просто не будет компилироваться, если T не имеет их. Вы хотите сделать лучше, чем это? Кроме того, T также должен удовлетворять требованиям std :: vector - он должен быть выполнен с возможностью копирования. – UncleBens
О! ОК. Тогда, возможно, этот пример не является проблемой. Но я просто представил их в качестве примеров, а не какую-то определенную функцию. – user855