두 개 이상의 템플릿 매개 변수를 받아들이는 연관 컨테이너를 매개 변수로 받아 들일 수있는 함수를 작성하는 방법을 알고 싶습니다. 예를 들어, std :: map에서 작동하는 함수를 작성하려면 아래에 표시된 것과 같은 것을 쓸 수 있습니다.함수 컨테이너 템플릿으로서의 연관 컨테이너 매개 변수
template <class Map, class Key, class Value, class Compare, class Allocator>
void foo(Map<Key, Value, Compare, Allocator>& map);
boost :: unordered_map은 5 개의 템플릿 매개 변수를 허용하기 때문에 boost :: unordered_map에는 사용할 수 없습니다. 지도를 단일 템플릿 매개 변수로 받아들이고 나중에 키와 값 유형을 추론하기 위해 지원해야하는 특성을 사용할 수 있지만 중첩 된지도의 경우 코드가 매우 상세하고 유지 관리가 어려워집니다. 그러한 함수를 작성하는 더 쉬운 방법이 있겠지만 여전히 2보다 크거나 같은 템플릿 매개 변수의 수를 허용하는 연관 컨테이너에 대해 작동합니까?
iterator가 제공 할 수있는 것보다 iterator가 작동하는 컨테이너에 대한 자세한 정보가 필요하기 때문에 매개 변수로 컨테이너 대신 iterator를 허용하는 것으로 충분하지 않습니다.
대단히 감사합니다!
내부 맵이 외부 맵과 다른 유형 인 경우 특히 코드가 중첩 된 맵에 대해 매우 자세한 정보가됩니다. 올바른 유형을 모두 추출하려면 Boost.TypeTraits를 사용하여 많은 유형 조작이 필요합니다. 값을 인트로 스펙트하기 위해 형질을 사용하지 않고 이것을 할 수있는 더 쉬운 방법이 있는지 알고 싶었습니다. –
중첩 된 맵에 추가되는 복잡성은 무엇입니까? 나는 당신이 성취하려는 것을 확신하지 못한다. 그것을 살펴보면 관련된 유형이 자체지도인지 여부는 중요하지 않습니다. –
그렇습니다. 그러나 const 및 const 또는 포인터인지 참조인지에 관계없이 외부 및 내부 맵의 유형에 반복자가 필요한 경우 사소한 작업을 수행하기 위해 여러 가지 오버로드 된 메서드로 유틸리티 클래스를 만들어야합니다. –