Недостаточно информации, чтобы дать подробный ответ, но, принимая вопрос за чистую монету, я думаю, что интерфейс AddX
/ RemoveX
подойдет, если вы хотите ограничить операции со списком или если при добавлении или удалении необходимо поддерживать некоторые другие ограничения элементы.
Однако, если вам часто приходится делать сложные манипуляции со списком другого класса, может, он там не принадлежит?
Или используйте класс mixin, если вы просто хотите удалить повтор:
template<class T>
class ListOf {
public:
// Public interface only allows adding or removal.
typedef boost::shared_ptr<T> Ptr;
void Add(const Ptr &elem) {
elems_.insert(elem);
}
void Remove(const Ptr &elem) {
elems_.erase(elem);
}
protected:
// Subclass can access container reference.
typedef std::set<Ptr> ElemSet;
ElemSet& Elements() {
return elems_;
}
const ElemSet& Elements() const {
return elems_;
}
private:
ElemSet elems_;
};
class Foo : public Bar, public ListOf<Baz> {
...
};