-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmay_be_usage_example.cpp
More file actions
55 lines (43 loc) · 1.26 KB
/
may_be_usage_example.cpp
File metadata and controls
55 lines (43 loc) · 1.26 KB
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
#include "may_be.hpp"
#include <iostream>
struct Point { //òèï, íàä êîòîðûì ìû áóäåì ýêñïåðåìåíòèðîâàòü.
float x, y;
Point(float x, float y): x(x), y(y) {}
Point(): x(0), y(0) {}
};
MayBe<Point> f1() {
return MayBeEmpty; //âåðíóòü ïóñòîòó.
}
MayBe<Point> f2() {
return MayBeDefault; //âåðíóòü îáúåêò, èíèöèàëèçèðîâàííûé ïî óìîë÷àíèþ
}
MayBe<int> f3() {
return CreateMayBe(7); //âåðíóòü êîíêðåòíîå çíà÷åíèå.
}
template <int i> struct X {
char a[i];
};
int main() {
{
MayBe<Point> point;
//èíèöèàëèçàöèÿ ñ ïàðàìåòðàìè.
if (true)
MAYBE_INIT(point, Point(1, 2));
}
{
MayBe<Point> point;
//Èíèöèàëèçàöèÿ ïî óìîë÷àíèþ:
if (true)
point.ResetDefault();
}
//Èíèöèàëèçàöèÿ êîïèðîâàíèåì ñóùåñòâóþùåãî îáúåêòà:
Point existing(3,4);
MayBe<Point> point = CreateMayBe(existing);
//èñïîëüçîâàíèå:
if (Point *p = point.Get()) //ïîëó÷èòü óêàçàòåëü, âîçìîæíî NULL
std::cout << p->x;
if (point)
std::cout << point->x;
std::cout << std::endl;
std::cout << sizeof(MayBe<bool>) << ' ' << sizeof(MayBe<short>) << ' ' << sizeof(MayBe<float>) << ' ' << sizeof(MayBe<double>) << '\n';
}