Skip to content

Commit d1363ba

Browse files
committed
Show implementation of non-owning storage
1 parent 0b2543a commit d1363ba

File tree

3 files changed

+14
-18
lines changed

3 files changed

+14
-18
lines changed

code/non_owning_storage.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
#include <vector>
1010

1111

12-
// sample(Vehicle)
13-
class Vehicle {
12+
// sample(VehicleRef)
13+
class VehicleRef {
1414
vtable const* const vptr_;
1515
void* ref_;
1616

1717
public:
1818
template <typename Any>
19-
Vehicle(Any& vehicle)
19+
VehicleRef(Any& vehicle)
2020
: vptr_{&vtable_for<Any>}
2121
, ref_{&vehicle}
2222
{ }
@@ -51,12 +51,12 @@ int main() {
5151
Truck chevrolet{"Chevrolet", 2015};
5252
Plane boeing{"Boeing", "747"};
5353

54-
std::vector<Vehicle> vehicles;
54+
std::vector<VehicleRef> vehicles;
5555
vehicles.push_back(audi);
5656
vehicles.push_back(chevrolet);
5757
vehicles.push_back(boeing);
5858

59-
for (Vehicle vehicle : vehicles) {
59+
for (VehicleRef vehicle : vehicles) {
6060
vehicle.accelerate();
6161
}
6262
}

code/non_owning_storage.dyno.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
using namespace dyno::literals;
1212

1313

14-
// sample(Vehicle)
15-
struct Vehicle {
14+
// sample(VehicleRef)
15+
struct VehicleRef {
1616
template <typename Any>
17-
Vehicle(Any& vehicle) : poly_{vehicle} { }
18-
// ^^^^ now a reference
17+
VehicleRef(Any& vehicle) : poly_{vehicle} { }
18+
// ^^^^ now a reference
1919

2020
void accelerate()
2121
{ poly_.virtual_("accelerate"_s)(poly_); }
@@ -51,12 +51,12 @@ int main() {
5151
Truck chevrolet{"Chevrolet", 2015};
5252
Plane boeing{"Boeing", "747"};
5353

54-
std::vector<Vehicle> vehicles;
54+
std::vector<VehicleRef> vehicles;
5555
vehicles.push_back(audi);
5656
vehicles.push_back(chevrolet);
5757
vehicles.push_back(boeing);
5858

59-
for (Vehicle vehicle : vehicles) {
59+
for (VehicleRef vehicle : vehicles) {
6060
vehicle.accelerate();
6161
}
6262
}

index.html

+3-7
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@
634634
### Basically a polymorphic view
635635

636636
```c++
637-
void process(Vehicle vehicle) {
637+
void process(VehicleRef vehicle) {
638638
...
639639
vehicle.accelerate();
640640
...
@@ -648,19 +648,15 @@
648648

649649
----
650650

651-
<!-- .slide: class="slide-hidden" -->
652-
653651
### How that's implemented
654652

655-
<pre><code data-sample='code/non_owning_storage.cpp#Vehicle'></code></pre>
653+
<pre><code data-sample='code/non_owning_storage.cpp#VehicleRef'></code></pre>
656654

657655
----
658656

659-
<!-- .slide: class="slide-hidden" -->
660-
661657
### With Dyno
662658

663-
<pre><code data-sample='code/non_owning_storage.dyno.cpp#Vehicle'></code></pre>
659+
<pre><code data-sample='code/non_owning_storage.dyno.cpp#VehicleRef'></code></pre>
664660

665661
====================
666662

0 commit comments

Comments
 (0)