1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
## extern_vptr
### Synopsis
Defined in <boost/openmethod/policies/basic_policy.hpp>.
```c++
namespace boost::openmethod::policies {
struct extern_vptr : policy {};
}
```
### Description
`extern_vptr` is a policy that stores and returns pointers to v-tables for
registered classes.
### Requirements
#### register_vptrs
```c++
template<typename ForwardIterator>
auto register_vptrs(ForwardIterator first, ForwardIterator last) -> void;
```
`ForwardIterator` is a forward iterator over a range of objects that contain
information about the type ids and the vptr of a registered class. They have the
following member functions:
```c++
auto type_id_begin() const -> type_id_forward_iterator;
auto type_id_end() const -> type_id_forward_iterator;
auto vptr() const -> const vptr_type&;
```
`type_id_begin` and `type_id_end` return iterators delimiting a range of
`type_id`s for a class.
`vptr` returns a _reference_ to a _static_ variable containing a pointer to the
v-table for a the class. Its value is set by `initialize`. While the value of
the variable changes with each call to `initialize`, the variable itself remains
the same.
## indirect_vptr
### Synopsis
```c++
struct indirect_vptr : policy {};
```
### Description
`indirect_vptr` is a policy that makes `virtual_ptr`{empty}s and `inplace_vptr` use
pointers to pointers to v-tables, instead of straight pointers. As a
consequence, they remain valid after a call to `initialize`.
### Requirements
None. The policy is its own implementation.
|