Реализации на С++
Composite
Общая реализация на языке С++
# include <iostream>
# include <initializer_list>
# include <memory>
# include <vector>using namespace std;
class Component
using PtrComponent = shared_ptr<Component>;
using VectorComponent = vector<PtrComponent>;class Component
{
public:
using value_type = Component;
using size_type = size_t;
using iterator = VectorComponent::const_iterator;
using const_iterator = VectorComponent::const_iterator;
virtual ~Component() = default;
virtual void operation() = 0;
virtual bool isComposite() const
{
return false;
}
virtual bool add(initializer_list<PtrComponent> comp)
{
return false;
}
virtual bool remove(const iterator& it)
{
return false;
}
virtual iterator begin() const
{
return iterator();
}
virtual iterator end() const
{
return iterator();
}
};int main()
{
using Default = shared_ptr<Component>;
PtrComponent fig = make_shared<Figure>(), cam = make_shared<Camera>();
auto composite1 = make_shared<Composite>(fig, cam, Default{});
composite1->add({ make_shared<Figure>(), make_shared<Camera>() });
composite1->operation();
cout << endl;
auto it = composite1->begin();
composite1->remove(++it);
composite1->operation();
cout << endl;
auto composite2 = make_shared<Composite>(make_shared<Figure>(), composite1, Default());
composite2->operation();
}Last updated