File: vptr.adoc

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (64 lines) | stat: -rw-r--r-- 1,518 bytes parent folder | download | duplicates (3)
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.