-
Notifications
You must be signed in to change notification settings - Fork 10
/
0463.txt
180 lines (180 loc) · 13.1 KB
/
0463.txt
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
이 아니어서 포프 입니다 음 제가 예전에 한동안 제가 쓴 c 플러스
플러스 일레븐 뭐 제가 쓴 c 플러스 플러스 씩 집 7
세븐 팀 뭐 이런식으로 해서 비디오를 마법 만들었어요 그쵸
아 그때 이제 만들다가 이제 관도 썼는데
음 왜냐하면 제가 쓰는건 입니다 얘기했다고 생각을 해서 관도 썼는데 사실
지나고 보니까
아닌 것들이 몇 개 보이더라고요 그게 특히 보였던 게
요번에 이제 저희 4q 아카데미 제가 아는 이제 온라인 제대로 내 온라인
컴퓨터 교육 서비스
그거를 만들고 실제 강의를 진행하면서 강 의자를 준비하며 자 이런거는
내가 잘 쓰는건데
그리고 필요한 건데 없게 해서 이걸 내가 말하지 않은 것들이 있구나 라는
겜 어깨가 나왔어요
그래서 그거에 대한 첫 번째 걸로 오늘 이제 하나 만드는 거에요
아 내가 쓰는 c 풀 cio 까 텍 c 플러스 플러스 1 x 11 17
뭐 이런 거죠
조만간 이 공도 되니까 이름을 좀 바꿔야 될거 같긴한데
거기서 이제 됐다 온게 버라이어티 템플릿 아기 먼트 아버 라리 템플릿이
라고도 하는 것도 같아요
정확히 뭐냐 에게 한국말로 번역을 하면 가변 인자 템플릿이 에요
아 어떻게 이걸 설명을 하면 좋을까
음 일단 템플릿 프로그래밍을 하시다보면 못 주로 안 하시는게 좋지만 이제
하실 경우들이 있어요
하시다 보면은 보통 매개 변수를 숫자를 정해도 넣어줘요 첫번째 매개변수는
t
두번째 매개변수는 s 세 번째 매개변수는
몹이 v 뭐 이런식으로 해서 쭉 매개 만들어 줬는데 그게 아니라 나는 그
매개변수가 정해져 있지 않고 아무거나 받을 수 있는 그런 아 매개 변수를
뭐 5개 6개 7개 이렇게 자유롭게 놀 수 있는 그런 템플릿을 만들고
싶다
그럴때 쓰는 게 가변 이제 템플릿이 에요 그 전에는 안 됐었죠
아 이게 왜 필요하냐 그러면은 일단 함수 에서도 그런 게 있다는 걸 한번
말씀을 드리면
아 요런게 필요 하겠구나 생각을 할 수도 있어요
가장 대표적인 암수가 이제 프린트에 c 에서 프린트 f 함수 보면은
프린트 f 프린트 f 도 그렇고 뭐 spent f 도 그렇고 처음
매개변수는 포맷팅 스트링 이잖아요
예를 들어서 때가 아 스트링 1 아 그리구 인테 저하나 이렇게 따로
가면은 폼의 스트링 열고 거기다 퍼센트 s 퍼센트 t
이런식으로 하면 은 내가 2개 매개 변수를 뒤에 추가로 넣을 건데
하나가 이제 스트링이 고 1 가수 짜다 라는 얘기죠
그리고 그 뒤에 이제 스트링 매개변수와 넣어주고 다시 건마 찍고 숫자
내게 면서 라 더 주고 그렇게 하면 이게 아무 문제없이 돌아요 그쵸
그런 식으로 이제 함수로 채우고 싶다는 거죠
아맥스 아 그렇죠 함수 호출 했으니까 이제 템플릿 또 그런식으로 써보고
싶다는 거에요
실제 프린트 앱스 이제 내부가 어떻게 되는지 보면은 뭐 daa 알지 뭐
이런거 하고 비긴 & 에서 그걸 이제 루프를 알아서 돌아 주는 그런
신택스 가 있어요 문법상 의 그런걸 지원하고자 하는 건데 뭐 그렇게까지
지원하는 건 아니고 템플 이젠
그 실제 사용 멀어 보면은 아까 말했던 근 가변 인자 함수 연 가변 인자
보면 보통 뭐 한 편 수면 적고 그 다음에 쩜쩜쩜 찍으면 그게 가변 인자
템 가변 인자 라는 거에 함수 요 템플릿 선언할 때도 그렇게 할 수 있어
이제는 티아고 점 점 점 을 찍으며 는 이제 그게 가변 인자 로 여러가지
이제 데이터가 온다는 얘기에요 그 형도 다르고
어쨌든 간에 뭐 수가 여러 가져올 수 있다
4 이런 얘기를 하면 은 아 이건 어디에 쓰 지 라고 고민할 수밖에 없는
경우가 있어요 내가 템플릿을 만들 때 보통 후 니모 템플릿 사용하는
경우가 뭐 stl 컨테이너 사용할 때 벡터 그러면 여기 들어가는 형 인
트
뭐 이런식으로 많이 쓰잖아요 근데 벡터 안혜인 틴트 느낀 또 이상한 이건
말이 안 되고
그럼 어디에 쓸까 이런걸 고민을 하며 는
쓰 꼬시 한두군데 정도 가 있어요 사실은 이거를 구글의 가져갔고
버라이어티 템플릿
그리고 외울 듀스 찾으면 뭐 나오는 글이 하나 있어요 뭐 입어 라이브캠
플리스 게 가장 좋은 7가지 사용해 나오는데 거기서 솔직히 1
5개는 아 빨간 되는 얘기고 거의 필요도 없는 얘기 그냥 뭐 망상 하고
있는거고 그냥 억지로 리스트 만들기 위해 한 두개 정도 그나마 된건데
이거를 정확히 얘기하면 요 쓰시지 아닐 생각을 하면 젤 편해요
이게 그 크게 왜 있어 그런 말 하실 텐데 이게 나온 이유는 솔직한
얘기로
유니크 포인트 때문에 나온 거에요 c 풀풀 11
거기서 유니크 포인터 쓰시면 은 유니크 포인터 처음 만들 때 아 포인터를
그냥 집어 넣게 되어 있으니까 포인터를 유니크 포인트 안에 집어 놓고도
실제 c 스타일 포인터를 계속 밖에서 쓰면서 뭐 지울 수도 있고 좀
이상한 난리를 칠 수가 있어요
그런거라 막기 위해서 아 그러면은 템플릿으로 차라리 메이크 유니크 라는
새로운 템플릿을 만들어 주자
그럼 a 크리니크 를 만들어야 되는데 그 유니크 포인트의 담을 수 있는
모 개체들 클래스들 뭐 종류들 타입이 굉장히 다양하지 않아요
그러면 그것을 뉴 해서 넣어 줘야 되는데 결과적으론 그 뒤에 들어가는
매개변수 들이 클래스 마다 다르다는 거예요
어떤 클래스 는 생성자가 기본 생성자가 있고 어떤 클래스 는 생성자가 p
인 트 2개 받기도 하고 어떤걸 생성자가 말도 안되게 머플러 포인터
에다가 차 포인터 받고 이렇게 다양하기 때문에 그 모든걸 아우를 수 있는
템플릿을 만들 수가 없는 거죠 그래서 아
그렇다면은 메이크 유니크 해놓고 어떤 형이 적어두고 그 다음에 괄호를
열고 실제 그 냅 생성 안에 클래스 그 타입 클래스 에 들어가는 아
생성자 매기면 들어가 쭉 나열 하면 그게 알아서 내부에서
그 생성자로 곧바로 호출할 수 있게 해주죠 즉 템플릿을 만들어서 메이크
2판 템플릿을 만들고 거기에 인자를 넣으면 은 실제 가 타입의 생성자를
호출 유하고 호출해서 그게 포인터가 나오면 걸 대입할 수 있게 만들자
즉 이거는 매개변수 포어 띵 이라고 해요
매개변수 눈 듣고 그대로 뭐 아까 인 트 플롯 인트로 따면 그것을 그대로
뉴타입 인 트 플롯 인 트 너 생성이 되게 컴파일 도중에 다 일어난
일이니까
그 순서가 맞고 타입이 왔다 며 컴파일이 되니까 그런 식으로 하게 서
나온 게 사실은 더라 어디 템플릿이 에요 그래서 솔직히 이봐 아이템
플렉스 시다 보면요 쓰려고 보다 보면은 쓸 수 있는 곳이 거의 요구 않아
뿐이에요
내가 어떤 함수 아님이 것처럼 어떤 생성자를 이제 호출 하고 싶은데 그
생성자에 들어갈 수 있는 매개 변수 공알 다양하니까 왜냐면 제가 템
플러스는
그 클래스 타입 그거는 제 내리고 그쵸
거기에 따라 어떤 생성자가 들어간 지 미리 다 알 수가 없으니까 그렇게
매개변수를 쓸 때 완벽하게 포워딩 해주는 개념은
기능을 쓰자 라고 하는 이게 말이 되요
9 그 이거 나온 다음에 저도 게임을 몇 몇 개를 이제 아 쉬핑 을 했죠
그중 하나가 그 헤일로 아 뭐였지 꼴찌 pc 버전
헤일로 꼬리 pc 버전 됐고 마인크래프트 됐어요
거기에서 이제 되게 큰 코드 베이스 였고 솔직히 굉장히 크게 뜯어고치는
작업들이 많았거든요
그 상황에서 그 방대한 코드 베이스 루트 면서도 제가 이 버라이어티
템플릿을 써니의 써야만 됐던 경우는 제가 조금 전에 말했던 그런
아 포워딩 아기 먼트 인자들은 폴딩 하는 게 전부였어요
제가 했던 뭐가 어떤건지 대충 말씀을 드리자 나는
음
어쨌든 그 저희가 만들고 있는 엔진이 멀티플랫폼 엔진 이었어요 1 에서만
덜 만한 되고 여러 개 더 돌아야 되는데 그러면 은 렌더링 엔진이 아르보
윈도우 수 과정에서 디렉 텍스 같은 거고 그럼 디렉 텍스 에서 이제
레퍼런스 카운팅 을 쓰 져 그래서 이제 그런 레퍼런스 카운팅 하는게
있었고 그리고 그게 아니 따른 플랫폼에서 이제
5 어떤 플랫폼이 말한 하지만 콘솔 같은 어떤 플랫폼에서
레퍼런스 카운팅 없이 그래픽을 라이브를 써야 되는 부분이 있었어요 그래서
그런 라이브러리는 이제 그 개체를 가져다가 초기와 이니셜 아이 조 출
해주고 어쩌고 저쩌고 해주고
지우는 것은 마지막에 어쩌구 파이널 라이즈 라는 함수 호출 하면 알아서
지워졌어요
그러면 어찌 보면 이것은 쉐어 드 포인터 라는 개념으로 보면요
그쵸 쉴드 포인터 참조 카운트 이런걸로 보면은
뭐 생성은 생성 이지만 지워지는 부분에서 어쨌든 간에 지워질 때 빠 인한
라이즈 를 호출해 줘야 하는 경우 였어요
그러면 월래는 손을 짜고 출 해야 되지만 그다지 파이널 라이즈 호출
해줘야 된다
소 * 자에는 아 이 타입의 파이널 라이즈 멈출 해주면 되잖아요 그럼
저희가 템플릿 클래스를 만들 수 가 있었어요
템플릿 클래스 만들고 여기에 어떤 타입이 들어오던 우리는 소멸자 에서 그
타입의 파이널 라이즈 호출한다 그 놓게 근데 처음에 생성할 때 가
문제였어요
이 템플릿 클래스를 생성할 때
뭐 아까 이미쉘 아이 조 추출하고 인식을 라이즈 호출할 때 받는
매개변수가 여러개 였거든요 어떤거는 무슨 뭐 메모리 관리자를 받기도 하고
어느 어떤것은 야무 숫자를 받기도 하고 그 이니셜 라이즈 를 호출하는 건
똑같은데 함수명 은 거기에 들어가는 매개변수가 달랐어요
그래서 아 이거는 아 더 라이트 템플 있어 같고 그냥 생성자를 만들고
클래스의 생성될 만들고 클래스가 생성 내를 오브젝트 해석을 내려 순간 아
그거 의 이니셜 아이즈 호출 하면서 그쵸
인쇄 주고 출 하면서 생성자로 들어온 매개변수로 틀 하며 생성은 끝나고
그리고 아까 말했듯이 자동으로 그 템플릿 화된 생성 아 클래스가 지워질
때 아까 소멸자 it 아빠인 얼마 이제까지 호출해서 그 20 자가 이제
손을 자 안에서 그 실제 개체 파이널 라이즈 까지 호출해서 한번에 해결
되게 할 수 있구나
그래서 그렇게 한번 만든 적이 있어요 그런데 결과적으로 보면 은
메이크 유니크 란 별로 다르다 쬲 메이크 이니 그도 결과적으로는 자기의
템플릿이 하나 있고 그 안에 뭔가를 생성한 다음에 가지고 있다가 끝날 때
어 이직 알아서 디스트로이 디스 트럭 터 호출하기 위해 있는 거니까 사실
없네 따지면
방법은 똑같았어요 그거를 그냥 따른 플랫폼에서는 그런 식으로 구현을
안하고 인샬라 이즈모 파이널 라이즈 로 줄을 하게 만들었기 때문에 어쩔
수 없이 패했던 거죠
이렇게 보고 나면 은 정말 아 이제 브라질 템플릿이 쓸 곳은 있어요 가끔
이렇게 특히 여러 가지 플랫폼을 하나의 이제 클래스 로 좀 감싸 갖고
크게 문제가 없게 만들기 위해서
있는데
코 외에 다른 것은 저도 이제 아까 말씀드렸던 뭐 7가지 말씀드렸잖아요
그거 찾아보세요 굴 가서 버라이어티 템플릿 웰트 유스 그거 보시면 이제
아 모크 로프나 볼 수 있는데요 한가지 외에는 쓰실 일이 별로 없을
거에요 그래서 제가 쓰는 거지만 그냥 거기 있으니까 이걸 어디든 서버
겠다고
괜히 엉뚱한 애쓰지 마시고 이게 나온 배경
그걸 아시면 아 원래 그거 하나 용으로 만들었는데 내가 요거를 조금 딴
되었을 수 있겠구나 고 정도로만 생각하시면 좋아요
이게 뭐 언어에서 지원하는 기능이 니까 굉장히 모든 곳에 엄청나게 쓸 수
있을 거야 라고 생각하는 거 자체가 이제 큰 오산 이에요 그 템플릿
프로그래밍 쪽에선 그 생각하면서 저희가 코드를 굉장히 많이 말아 먹었어요
c 플러스 플러스 프로그래머들이 그래서 템플릿 프로그래밍 할 때는 이게
어떤 영문인지 알 고 분명히 쓰시 라는 말씀을 드리기 위해서 오늘
비디오를 만들었습니다
아요 순차 아 예 끝낼게요 뽑혔습니다