mirror of
https://github.com/boostorg/openmethod.git
synced 2026-01-19 04:22:12 +00:00
60 lines
1.5 KiB
Plaintext
60 lines
1.5 KiB
Plaintext
|
|
## vptr_vector
|
|
|
|
### Synopsis
|
|
|
|
Defined in <boost/openmethod/policies/vptr_vector.hpp>.
|
|
|
|
```c++
|
|
namespace boost::openmethod::policies {
|
|
|
|
template<class Policy>
|
|
class vptr_vector : Base {
|
|
public:
|
|
template<typename ForwardIterator>
|
|
static auto register_vptrs(ForwardIterator first, ForwardIterator last) -> void;
|
|
|
|
template<class Class>
|
|
static auto dynamic_vptr(const Class& arg) -> const vptr_type&;
|
|
};
|
|
|
|
}
|
|
```
|
|
|
|
### Description
|
|
|
|
`vptr_vector` is an implementation or `external_vptr` that keeps the pointers to
|
|
the v-tables in a `std::vector`. If `Policy` contains `indirect_vptr`, a level
|
|
of indirection is added, making the policy usable in presence of dynamic
|
|
loading.
|
|
|
|
`Policy` is the policy containing the policy.
|
|
|
|
### Members
|
|
|
|
#### register_vptrs
|
|
|
|
```c++
|
|
template<typename ForwardIterator>
|
|
auto register_vptrs(ForwardIterator first, ForwardIterator last) -> void;
|
|
```
|
|
|
|
Stores the pointers to v-tables in a vector, indexed by the (possibly hashed)
|
|
`type_id`s of the classes registered in `Policy`.
|
|
|
|
If `Policy` contains a `type_hash` policy, call its `hash_initialize`
|
|
function, and uses it to convert the `type_id`{empty}s to an index.
|
|
|
|
#### dynamic_vptr
|
|
|
|
```c++
|
|
template<class Class>
|
|
auto dynamic_vptr(const Class& object) -> const vptr_type&;
|
|
```
|
|
|
|
Returns a pointer to the v-table for `object` (by reference).
|
|
|
|
Obtains a `type_id` for `object` using `Policy::dynamic_type`. If _Policy_
|
|
contains a `type_hash` policy, uses it to convert the result to an index;
|
|
otherwise, uses the `type_id` as the index.
|