반응형

클래스 이름::xx 접근 가능한 요소들

  • 값: enum 상수, static 멤버 변수

  • 타입: typedef, using

템플릿 의존적으로 타입의 이름에 접근할때는 typename 키워드를 붙여야한다.

  • T::DWORD -> 컴파일러가 DWORD를 값으로 해석

  • typename T:DWORD -> 컴파일러가 DWORD를 타입으로 해석

템플릿이 아닌 경우에는 typename을 사용할 수 없다.

  • typename T::DWORD* p; // OK

  • typename Test::DWORD* p; // Error

#include <iostream>
using namespace std;

class Test
{
public:
    enum { value1 = 1 };
    static int value2;
    typedef int INT;
    using SHORT = short;
    class innerClass {};
    using DWORD = int;
};
int Test::value2;

template<typename T>
int foo(T t)
{
    // 타입으로 해석
    //typename T::DWORD* p;
    
    // 값으로 해석
    //T::DWORD* p;

    return 0;
}

int main()
{
    Test t;
    foo(t);
}

 

 

반응형

반응형

아래의 Complex 멤버의 data type의 예

  • int로 할 경우 : 실수를 담을 수 없음
  • double로 할 경우 : 실수와 정수를 모두 담을 수 있지만 double은 int보다 overhead가 있음
  • 라이브러리 설계자는 Complex의 틀(template)만 제공하고 내부 타입은 사용자가 결정할 수 있도록 제공
template<typename T>
class Complex
{
    T re, im;
public:
    Complex(T r, T i) : re(r), im(i) {}
};

int main()
{
    Complex<int> c1(1, 2);
    Complex<double> c2(1.1, 2.2);
}
반응형

+ Recent posts