내 말은, 특성 클래스가 :템플릿 특수화 ::지도
template <class T>
struct KeyValueTraits
{
typedef typename T::key_t key_t;
typedef typename T::value_t value_t;
}
가 지금은 std::map
template < typename... Args >
struct KeyValueTraits<typename std::map<Args...>::iterator >
{
typedef std::map<Args...> target_t;
typedef typename target_t::key_type key_t;
typedef typename target_t::mapped_type value_t;
};
컴파일러의 모든 반복자이 특성의 전문화를 선언하고 싶습니다 오류가 발생합니다 :
error C2764: 'Args': template parameter not used or deducible in partial specialization
그래서 가능한 모든 특성 유형을 선언하는 방법 std::map<...>::iterator
?
수 없습니다. 어쨌든 당신이하려는 방식이 아닙니다. 반복기에서 컨테이너 유형을 추출 할 방법이 없습니다. 대신에'first'와'second'를 사용할 수 있습니다 (C++ 11 필요). –
해결하려는 문제는 무엇입니까? 값 유형으로'std :: pair '를 갖는 반복자에 대해 적용 할 수있는 솔루션이 있습니다. iteraror가 있으면 컨테이너에 대한 정보를 얻는 것이 항상 가능하지는 않습니다. –