typename
: template 정의 내부에서, 의존적인 이름이 type 임을 선언하는데 typename을 사용한다.
위 코드에서 DWORD가 의미하는 바는 무엇일까?
추측 1) class AAA 내부에 static int DWORD 를 말하는가?
C++ 문법에서 classname:: 이 의미하는 바는 class 내의 static variable 에 접근할 때 사용되며,
위 코드는 class AAA에 선언된 static variable 과 global variable p 간의 곱셈 연산일 수 있다.
추측 2) class AAA 내부에 int 를 typedef 한 DWORD 를 말하는가?
int 를 typedef 한 것이라면, int* p; 포인터로 해석할 수도 있다.
결론은, 컴파일러가 1 번째 추측, 2 번째 추측 인지 판단할 수 없어서
추측 1) static variable 접근으로 동작한다는 것이다.
따라서, template 내부에서 의존적인 타입에 대해 접근할 때는 typename 을 사용해야 한다.
피드 구독하기:
댓글 (Atom)
[C++] meta programing
재귀 호출에 관해 template meta programming 을 적용한 예제를 살펴보자. #include using namespace std; int fact(int n){ if(n factorial 연산을 하는 일반적인 재귀 호출 함...
-
Smart Pointer : 포인터처럼 동작하며 자동으로 메모리를 해제하고 안전하게 resource를 관리하도록 돕는 객체 포인터는 소멸자가 호출되지 않아 memory leak이 발생한다. Java, C#같은 VM이 있는 언어는 VM에서 G...
-
Template specialization : class template 을 arguments에 따라서 customizing 하는 기법 먼저 위 예제의 첫 번째 template 선언처럼 일반적인 template 선언은 primary temp...
-
우리는 함수의 포인터를 사용하여 함수를 또 다른 함수의 인자로 또는 반환 타입으로 사용할 수 있다. 포인터 변수 선언 방법은 어떻게 하는가? 타입 * 변수명; (통상 C++은 type에 *를 붙여쓰고, C개발자는 변수명에 붙여씀) 함수 포인...
댓글 없음:
댓글 쓰기