c++

template C++

НooпeУ 2012. 9. 27. 22:53

template<typename T>

void print2nd(const C& container)

{

    if(container.size() >= 2)

    {

        typename C::const_iterator iter(container.begin());

    }

}


C::const_iterator는 중첩 의존 타입이름이다. C의 의존하는 타입임.

C::const_iterator가 type이라는 것을 컴파일러에게 알려주어야 함
그러긴 위해서 앞에 typename을 붙인다.


//여기서 typename이랑 class는 같음
template<typename C>
void f(const C& container, typename C::iterator iter); //첫번째 인자는 typename을 쓰면 안되고, 두번째는 써야함

//클래스 식별자로 있을때는 쓰면 안됨
template<typename T>
class Dervied : public Base<T>::Nested{
public:
    explicit Derived(int x):Base<T>::Nexted(x)
    {
        typename Base<T>::Nested temp;
    }
}