#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
void say( const char* msg ) { std::cout << msg << std::endl; }
class Window
{
public:
virtual void draw() { say( "Window::draw" ); };
virtual ~Window() { say( "Window::destructor" ); };
};
class WindowA : public Window
{
public:
virtual void draw() { say( "WindowA::draw" ); };
virtual ~WindowA() { say( "WindowA::destructor" ); };
};
class Windows1
{
public:
typedef std::vector< boost::shared_ptr<Window> > container_type;
void add_window( const boost::shared_ptr<Window>& p )
{
m_windows.push_back(p);
};
void draw_windows()
{
for( container_type::iterator i = m_windows.begin(); i != m_windows.end(); ++i ) {
(*i)->draw();
}
};
private:
container_type m_windows;
};
class Windows2
{
public:
typedef boost::ptr_vector<Window> container_type;
void add_window( Window* p )
{
m_windows.push_back(p);
};
void draw_windows()
{
for( container_type::iterator i = m_windows.begin(); i != m_windows.end(); ++i ) {
(*i).draw();
}
};
private:
container_type m_windows;
};
int main()
{
{
say( "Windows1" );
Windows1 windows;
boost::shared_ptr<Window> ptr_win1( new Window() );
boost::shared_ptr<Window> ptr_win2( new WindowA() );
windows.add_window( ptr_win1 );
windows.add_window( ptr_win2 );
windows.draw_windows();
}
{
say( "Windows2" );
Windows2 windows;
windows.add_window( new Window() );
windows.add_window( new WindowA() );
windows.draw_windows();
}
return 0;
}