1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Ion Gaztanaga 2009-2013. Distributed under the Boost
4// Software License, Version 1.0. (See accompanying file
5// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6//
7// See http://www.boost.org/libs/container for documentation.
8//
9//////////////////////////////////////////////////////////////////////////////
10
11//[doc_type_erasure_MyClassHolder_h
12#include <boost/container/vector.hpp>
13
14//MyClassHolder.h
15
16//We don't need to include "MyClass.h"
17//to store vector<MyClass>
18class MyClass;
19
20class MyClassHolder
21{
22 public:
23
24 void AddNewObject(const MyClass &o);
25 const MyClass & GetLastObject() const;
26
27 private:
28 ::boost::container::vector<MyClass> vector_;
29};
30
31//]
32
33//[doc_type_erasure_MyClass_h
34
35//MyClass.h
36
37class MyClass
38{
39 private:
40 int value_;
41
42 public:
43 MyClass(int val = 0) : value_(val){}
44
45 friend bool operator==(const MyClass &l, const MyClass &r)
46 { return l.value_ == r.value_; }
47 //...
48};
49
50//]
51
52
53
54//[doc_type_erasure_main_cpp
55
56//Main.cpp
57
58//=#include "MyClassHolder.h"
59//=#include "MyClass.h"
60
61#include <cassert>
62
63int main()
64{
65 MyClass mc(7);
66 MyClassHolder myclassholder;
67 myclassholder.AddNewObject(o: mc);
68 return myclassholder.GetLastObject() == mc ? 0 : 1;
69}
70//]
71
72//[doc_type_erasure_MyClassHolder_cpp
73
74//MyClassHolder.cpp
75
76//=#include "MyClassHolder.h"
77
78//In the implementation MyClass must be a complete
79//type so we include the appropriate header
80//=#include "MyClass.h"
81
82void MyClassHolder::AddNewObject(const MyClass &o)
83{ vector_.push_back(x: o); }
84
85const MyClass & MyClassHolder::GetLastObject() const
86{ return vector_.back(); }
87
88//]
89

source code of boost/libs/container/example/doc_type_erasure.cpp