Skip to content

Commit 05bb940

Browse files
committed
Done Cpp Templates: The Complete Guide chapter 1-3.
1 parent ca05afa commit 05bb940

File tree

5 files changed

+130
-0
lines changed

5 files changed

+130
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add_executable(TTCG chapter3/main.cpp)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// Created by 10578 on 2021/4/6.
3+
//
4+
#include "iostream"
5+
#include "algorithm"
6+
#include "type_traits"
7+
8+
template<typename T1, typename T2>
9+
auto max(T1 a, T2 b) -> std::common_type_t<T1, T2>{
10+
return b < a ? a : b;
11+
}
12+
13+
int main(){
14+
auto a = max(1, 0.0);
15+
16+
std:: cout << " test !" << std::endl;
17+
18+
return 0;
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// Created by 10578 on 2021/4/6.
3+
//
4+
5+
#include "stack1.h"
6+
#include "iostream"
7+
#include "vector"
8+
#include "deque"
9+
10+
int main(){
11+
Stack<int, std::deque> s;
12+
s.push(1);
13+
s.push(2);
14+
15+
std::cout << s << std::endl;
16+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// Created by 10578 on 2021/4/6.
3+
//
4+
5+
#ifndef __CODE_LIBRARY_STACK1_H__
6+
#define __CODE_LIBRARY_STACK1_H__
7+
8+
#include "vector"
9+
#include "cassert"
10+
#include "iostream"
11+
12+
template<typename T, template<typename...> class C>
13+
class Stack;
14+
15+
template<typename T, template<typename...> class C>
16+
std::ostream &operator<<(std::ostream &os, Stack<T, C> const &s);
17+
18+
template<typename T, template<typename...> class C>
19+
class Stack {
20+
private:
21+
C<T> elems;
22+
23+
public:
24+
void push(T const &elem);
25+
T pop();
26+
T const & top() const;
27+
bool empty() const{
28+
return elems.empty();
29+
}
30+
31+
friend std::ostream& operator<< <T>(std::ostream &os, Stack<T, C> const &s);
32+
};
33+
34+
template<typename T, template<typename...> class C>
35+
void Stack<T, C>::push(T const &elem) {
36+
elems.push_back(elem);
37+
}
38+
39+
template<typename T, template<typename...> class C>
40+
T Stack<T, C>::pop() {
41+
assert(!elems.empty());
42+
T temp = top();
43+
elems.pop_back();
44+
return temp;
45+
}
46+
47+
template<typename T, template<typename...> class C>
48+
T const & Stack<T, C>::top() const {
49+
assert(!elems.empty());
50+
return elems.back();
51+
}
52+
53+
template<typename T, template<typename...> class C>
54+
std::ostream &operator<<(std::ostream &os, Stack<T, C> const &s) {
55+
for (auto &&x: s.elems) {
56+
os << x << " ";
57+
}
58+
os << std::endl;
59+
60+
return os;
61+
}
62+
63+
#endif //__CODE_LIBRARY_STACK1_H__
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// Created by 10578 on 2021/4/7.
3+
//
4+
5+
#include "iostream"
6+
#include "vector"
7+
8+
using namespace std;
9+
10+
template<auto Val, typename T = decltype(Val)>
11+
T add_value(T t){
12+
return t + Val;
13+
}
14+
15+
template<int V, int... Vs>
16+
struct sum{
17+
const static int value = V + sum<Vs...>::value;
18+
};
19+
20+
template<int V>
21+
struct sum<V>{
22+
const static int value = V;
23+
};
24+
25+
26+
int main(){
27+
cout << add_value<10>(100.1) << endl;
28+
cout << sum<1, 2, 3, 4, 5>::value << endl;
29+
30+
return 0;
31+
}

0 commit comments

Comments
 (0)