다음과 같은 이유가 무엇인지에 대해 머리를 쓰려고합니다. 나는 표준 : : 벡터를 가지고 있고 그것의 정적 멤버 함수과 같이 VALUE_TYPE 포함되어있어 전화를 걸 :C++ STL 컨테이너의 value_type의 정적 멤버 함수 호출
벡터 사실에 템플릿 유형에 대한 형식 정의입니다std::vector<Vector> v;
unsigned u = v.value_type::Dim();
:
template <typename T, unsigned U> class SVector;
typedef SVector<double, 2> Vector; //two-dimensional SVector containing doubles
및 정적 멤버 함수 Dim()은 실제로 벡터의 차원을 나타냅니다. 나 퍼즐
error: ‘SVector<double, 2u>’ is not a base of
‘std::vector<SVector<double, 2u>, std::allocator<SVector<double, 2u> > >
:
지금 컴파일러라는 오류 메시지를 반환합니다. 나는unsigned u = Vector::Dim();
에 의해 분명히 기분을 상하게 라인을 대체 할 수있는 그 작동하지만, 그것은 V의 VALUE_TYPE ... 감사에 대한 가정을 하드 코드로 분명 추한입니다!
많은 분들께 감사드립니다.인스턴스를 통해 value_type에 액세스 할 수 없다는 것을 알지 못했습니다. 혹시 이것이 허용되지 않는 이유를 알고 싶습니까 (허용되면 잘못 될 수 있습니다)? – yungchin
@yungchin이 방금 추가 한 설명이이 문제에 대해 충분히 명확한 지 확인하십시오. –
허용 된 경우 아무 것도 잘못 될 것입니다. C++은 정적으로 타입이 지정되어 있기 때문에 이미 v가 std :: vector이라는 것을 알고 있지만 다시 v는 무엇인지 이미 알고 있으므로 실제로 아무런 차이가 없습니다. 나는 C++ 디자이너가 정적 멤버와 인스턴스 멤버를 명확히 구분하고 싶어한다고 생각합니다. –