File: method_override.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,506 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

[#method_override]
## method::override

### Synopsis

```c++
namespace boost::openmethod {

template<typename Signature, typename ReturnType, class Policy>
template<auto... Functions>
struct method<Signature, ReturnType, Policy>::override {
    override();
    ~override();
};

}
```

Usage:
```c++
method<Signature, ReturnType, Policy>::override<Functions...> some_unique_name;
  // at file scope
```

### Description

`override`, instantiated as a static object, add one or more overriders to an
open-method.

_Functions_ must fulfill the following requirements:

* Have the same number of formal parameters as the method.

* Each parameter in the same position as a `virtual_ptr<T>` in the method's
parameter list must be a `virtual_ptr<U>`, where _U_ is covariant with _T_. The
_Policy_ of the `virtual_ptr`{empty}s must be the same as the method's _Policy_.

* Each formal parameter in the same position as a `virtual_` parameter must have
a type that is covariant with the type of the method's parameter.

* All other formal parameters must have the same type as the method's
  corresponding parameters.

* The return type of the overrider must be the same as the method's return type
  or, if it is a polymorphic type, covariant with the method's return type.

### Members

#### constructor

```c++
override<Functions>::override();
```

Add _Functions_ to the overriders of `method`.

#### Destructor

```c++
override<Functions>::~method();
```

Remove _Functions_ from the overriders of `method`.