2010-06-18 2 views
10

stl 컨테이너와 마찬가지로 클래스 인스턴스의 클래스 내부 typedef에 액세스 할 수없는 이유는 무엇입니까? 이것에 대한 특별한 통찰력이 있습니까?인스턴스에서 typedef에 액세스


VALUE_TYPE 벡터의 :: VALUE_TYPE

예로서 템플릿 매개 변수를 지정할 필요가 아니었다면 좀 더 일반적인 코드를 만드는 도울 수있는 템플릿 매개 변수 일 때 :

class T { 
public: 
    typedef int value_type; 
    value_type i; 
}; 

T t; 
T::value_type i; // ok 
t.value_type i; // won't work 

답변

5

typedef는 다른 유형의 동의어이기 때문에. 그것은 객체 (클래스의 멤버)가 아닙니다.

@Neil Butterworth는 다음과 같이 언급했습니다. "연산자는 회원 액세스 연산자입니다."

+0

. operator는 _member_ 액세스 연산자입니다. –

+0

@ Nee Butterworth : Thanks :) – sinek

0

결코 모호하지 않으므로 다른 연산자를 사용하여 범위를 확인 (::)하면 회원 액세스 (.)보다 다른 이유가 없습니다. 그것은 성가심이지만 언어가 그대로입니다.


일부 언어는

  • C 번호는 . 대신 :: 사용 ... 다른 생각을 할 수 있지만 중첩 된 형식과 정적 멤버에 액세스 할 때 당신은 여전히 ​​클래스 이름을 사용해야합니다.
  • D는 .이고, <instance>.<static nested type><type>.<static nested type>과 동일하다.
+0

그것은 다른 연산자가 아닙니다. 타입에 대해'::'가 호출되는 반면 인스턴스에는'.'가 호출됩니다. 그러나 여전히, 나도 똑같은 것을 사용하지 않을 이유가 없다. –

관련 문제