Skip to content

Commit b0af68b

Browse files
author
Oğuzhan Katlı
committed
- template örnekleri güncellendi.
1 parent 1165c92 commit b0af68b

File tree

3 files changed

+161
-50
lines changed

3 files changed

+161
-50
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup>
4+
<ClCompile Include="main.cpp" />
5+
<ClCompile Include="src/3-SmartPointer/bonus/shared.cpp">
6+
<Filter>3- Smart Pointer\bonus</Filter>
7+
</ClCompile>
8+
</ItemGroup>
9+
<ItemGroup>
10+
<ClInclude Include="src/0-Types/no_destruct.h">
11+
<Filter>0- Types</Filter>
12+
</ClInclude>
13+
<ClInclude Include="src/0-Types/number.hpp">
14+
<Filter>0- Types</Filter>
15+
</ClInclude>
16+
<ClInclude Include="src/1-OperatorOverload/op_overload_override_example.hpp">
17+
<Filter>1-Operator Overload</Filter>
18+
</ClInclude>
19+
<ClInclude Include="src/2-Inheritance/diamond_problem.hpp">
20+
<Filter>2- Inheritance</Filter>
21+
</ClInclude>
22+
<ClInclude Include="src/2-Inheritance/friend_usage.hpp">
23+
<Filter>2- Inheritance</Filter>
24+
</ClInclude>
25+
<ClInclude Include="src/2-Inheritance/inheritance_usage.hpp">
26+
<Filter>2- Inheritance</Filter>
27+
</ClInclude>
28+
<ClInclude Include="src/2-Inheritance/template_inheritance_usage.hpp">
29+
<Filter>2- Inheritance</Filter>
30+
</ClInclude>
31+
<ClInclude Include="src/2-Inheritance/virtual_destructor.hpp">
32+
<Filter>2- Inheritance</Filter>
33+
</ClInclude>
34+
<ClInclude Include="src/3-SmartPointer/malloc_usage.hpp">
35+
<Filter>3- Smart Pointer</Filter>
36+
</ClInclude>
37+
<ClInclude Include="src/3-SmartPointer/shared_pointer.hpp">
38+
<Filter>3- Smart Pointer</Filter>
39+
</ClInclude>
40+
<ClInclude Include="src/3-SmartPointer/smart_pointer.hpp">
41+
<Filter>3- Smart Pointer</Filter>
42+
</ClInclude>
43+
<ClInclude Include="src/3-SmartPointer/weak_pointer.hpp">
44+
<Filter>3- Smart Pointer</Filter>
45+
</ClInclude>
46+
<ClInclude Include="src/3-SmartPointer/bonus/handle.h">
47+
<Filter>3- Smart Pointer\bonus</Filter>
48+
</ClInclude>
49+
<ClInclude Include="src/3-SmartPointer/bonus/shared.h">
50+
<Filter>3- Smart Pointer\bonus</Filter>
51+
</ClInclude>
52+
<ClInclude Include="src/3-SmartPointer/bonus/bonus_old_style_smart_pointer.hpp">
53+
<Filter>3- Smart Pointer\bonus</Filter>
54+
</ClInclude>
55+
<ClInclude Include="src/4-RefUsage/copy_elision_usage.hpp">
56+
<Filter>4- Ref Usage</Filter>
57+
</ClInclude>
58+
<ClInclude Include="src/4-RefUsage/ref_usage_example.hpp">
59+
<Filter>4- Ref Usage</Filter>
60+
</ClInclude>
61+
<ClInclude Include="src/5-Static/static_usage.hpp">
62+
<Filter>5- Static</Filter>
63+
</ClInclude>
64+
<ClInclude Include="src/6-Templates/template_container.hpp">
65+
<Filter>6- Templates</Filter>
66+
</ClInclude>
67+
<ClInclude Include="src/6-Templates/template_decltype.hpp">
68+
<Filter>6- Templates</Filter>
69+
</ClInclude>
70+
<ClInclude Include="src/6-Templates/template_mixin.hpp">
71+
<Filter>6- Templates</Filter>
72+
</ClInclude>
73+
<ClInclude Include="src/7-Exceptions/exception_usage.hpp">
74+
<Filter>7- Exceptions</Filter>
75+
</ClInclude>
76+
<ClInclude Include="src/8-CustomComparators/custom_comparator.hpp">
77+
<Filter>8- Custom Comparators</Filter>
78+
</ClInclude>
79+
<ClInclude Include="src/9-AsyncFuture/async_usage.hpp">
80+
<Filter>9- Async &amp; Future</Filter>
81+
</ClInclude>
82+
<ClInclude Include="src\6-Templates\template_staticpolymorphism.hpp">
83+
<Filter>6- Templates</Filter>
84+
</ClInclude>
85+
<ClInclude Include="src\6-Templates\template_crtp_usage.hpp">
86+
<Filter>6- Templates</Filter>
87+
</ClInclude>
88+
<ClInclude Include="src\6-Templates\template_policies.hpp">
89+
<Filter>6- Templates</Filter>
90+
</ClInclude>
91+
</ItemGroup>
92+
<ItemGroup>
93+
<Filter Include="2- Inheritance">
94+
<UniqueIdentifier>{3fe61484-9a33-424f-97ce-e3cb8fa8cebc}</UniqueIdentifier>
95+
</Filter>
96+
<Filter Include="1-Operator Overload">
97+
<UniqueIdentifier>{e4d242cc-2a40-4ef2-a0ad-36c52e5fc784}</UniqueIdentifier>
98+
</Filter>
99+
<Filter Include="0- Types">
100+
<UniqueIdentifier>{a29b09fe-3c3b-4911-90d6-c0bb4f8b3c92}</UniqueIdentifier>
101+
</Filter>
102+
<Filter Include="3- Smart Pointer">
103+
<UniqueIdentifier>{803d2eb1-2b61-4bea-a3d8-80af5d1cc216}</UniqueIdentifier>
104+
</Filter>
105+
<Filter Include="3- Smart Pointer\bonus">
106+
<UniqueIdentifier>{adf02153-dd2e-4b19-a9a4-75fba26276e8}</UniqueIdentifier>
107+
</Filter>
108+
<Filter Include="4- Ref Usage">
109+
<UniqueIdentifier>{7781fbb9-7a36-410b-85ac-67499bf15f4a}</UniqueIdentifier>
110+
</Filter>
111+
<Filter Include="5- Static">
112+
<UniqueIdentifier>{ec53b31b-0c89-4664-88f0-119582b7ef1e}</UniqueIdentifier>
113+
</Filter>
114+
<Filter Include="6- Templates">
115+
<UniqueIdentifier>{e0e38083-c5d1-47e8-a775-45777213b2be}</UniqueIdentifier>
116+
</Filter>
117+
<Filter Include="7- Exceptions">
118+
<UniqueIdentifier>{1c9c8802-7383-41e1-9876-733ebf4898b8}</UniqueIdentifier>
119+
</Filter>
120+
<Filter Include="8- Custom Comparators">
121+
<UniqueIdentifier>{ce19e4ad-334d-4591-a42c-8b4c873941c8}</UniqueIdentifier>
122+
</Filter>
123+
<Filter Include="9- Async &amp; Future">
124+
<UniqueIdentifier>{9a031543-0bf5-4a03-9114-624f0c69363a}</UniqueIdentifier>
125+
</Filter>
126+
</ItemGroup>
127+
</Project>

src/6-Templates/template_mixin.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -246,20 +246,20 @@ namespace mixin {
246246

247247
namespace solution {
248248

249-
template <typename BASE, typename T = typename BASE::value_type>
250-
struct Undoable : public BASE {
251-
typedef T value_type;
249+
template <typename Base>
250+
struct Undoable : public Base {
251+
typedef typename Base::value_type T;
252252
T before;
253-
void set(T v) { before = BASE::get(); BASE::set(v); }
254-
void undo() { BASE::set(before); }
253+
void set(T v) { before = Base::get(); Base::set(v); }
254+
void undo() { Base::set(before); }
255255
};
256256

257-
template <typename BASE, typename T = typename BASE::value_type>
258-
struct Redoable : public BASE {
259-
typedef T value_type;
257+
template <typename Base>
258+
struct Redoable : public Base {
259+
typedef typename Base::value_type T;
260260
T after;
261-
void set(T v) { after = v; BASE::set(v); }
262-
void redo() { BASE::set(after); }
261+
void set(T v) { after = v; Base::set(v); }
262+
void redo() { Base::set(after); }
263263
};
264264

265265
typedef Redoable< Undoable<Number> > ReUndoableNumber;

src/6-Templates/template_policies.hpp

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,64 +14,49 @@ namespace policy {
1414
/// policy (hareket tarzý) eklememiz en iyi yöntem olacaktýr.
1515
/// Policy detaylý anlatým için aþaðýdaki kitaptan anlatým yap:
1616
/// "Andrei Alexandrescu - Modern C++ design - generic programming and design patterns applied (2001)"
17-
template <typename T>
18-
struct ThrowIfZero {
19-
class SetZeroException : public std::exception {};
20-
21-
static void check(T* t) {
22-
if (t->get() == 0) throw SetZeroException();
23-
}
24-
};
25-
2617
template <typename T>
2718
struct AllowAny {
2819
static void check(T* t) { }
2920
};
3021

31-
/*
32-
* no need to redefine number class
33-
class Number {
34-
public:
35-
typedef int value_type;
36-
Number(int initial = 0) : _num(initial) { }
37-
virtual ~Number() { }
38-
39-
int get() const { return _num; }
40-
void set(int v) { _num = v; }
41-
private:
42-
int _num;
43-
};
44-
*/
22+
template <typename T>
23+
struct ThrowIfZero {
24+
class ValueZeroException : public std::exception {};
4525

46-
template <typename BASE, template <typename> typename CheckerPolicy = policy::ThrowIfZero>
47-
struct Undoable : public BASE, public CheckerPolicy<BASE> {
48-
typedef typename BASE::value_type value_type;
26+
static void check(T* t) {
27+
if (t->get() == 0) throw ValueZeroException();
28+
}
29+
};
4930

31+
template <typename Base, template <typename> class CheckerPolicy = policy::ThrowIfZero>
32+
struct Undoable : public Base {
33+
typedef typename Base::value_type value_type;
34+
5035
void set(value_type v) {
51-
before = BASE::get();
52-
BASE::set(v);
36+
before = Base::get();
37+
Base::set(v);
5338
}
5439

5540
void undo() {
56-
CheckerPolicy<BASE>::check(this);
57-
BASE::set(before);
41+
CheckerPolicy<Base>::check(this);
42+
Base::set(before);
5843
}
5944

6045
protected:
6146
value_type before;
6247
};
6348

64-
template <typename BASE, template <typename> typename CheckerPolicy = policy::AllowAny>
65-
struct Redoable : public BASE, public CheckerPolicy<BASE> {
66-
typedef typename BASE::value_type value_type;
49+
template <typename Base, template <typename> class CheckerPolicy = policy::AllowAny>
50+
struct Redoable : public Base {
51+
typedef typename Base::value_type value_type;
6752

6853
void set(value_type v) {
6954
after = v;
70-
BASE::set(v);
55+
Base::set(v);
7156
}
7257
void redo() {
73-
CheckerPolicy<BASE>::check(this);
74-
BASE::set(after);
58+
CheckerPolicy<Base>::check(this);
59+
Base::set(after);
7560
}
7661

7762
protected:
@@ -92,13 +77,12 @@ CREATE_ELEMENT_WITH_CODE(TemplatePolicies) {
9277
try
9378
{
9479
// but this will throw as we gave policy "throw if zero"
95-
ReUndoableNumberThrows numberthrows;
96-
numberthrows.set(10); numberthrows.undo(); numberthrows.redo();
80+
ReUndoableNumberThrows number_will_throw;
81+
number_will_throw.set(10); number_will_throw.undo(); number_will_throw.redo();
9782
}
9883
catch (const std::exception&)
9984
{
100-
// for debugging in catch block
101-
__nop();
85+
std::cout << "exception catched as assumed.." << std::endl;
10286
}
10387

10488
}

0 commit comments

Comments
 (0)