VC++의 약간 덜 오래된 버전 인 2010에 코드를 이식하는 데 문제가 있습니다. vc2010의지도 값 유형에 대한 멤버에 대한 포인터 만들기
이슈
가non-type-argument
에서
pointer-to-member
의 유도베이스로의 변환 결과 VC지도의 구현에 의해 발생이 요구되고 :
#include <map>
#include <algorithm>
template <typename MapValueType, int MapValueType::*var>
bool f (MapValueType const & v);
int main()
{
typedef std :: map<int, int> MapType;
MapType m;
std :: find_if (m.begin()
, m.end()
, f<MapType::value_type, & MapType::value_type::second>);
}
다음 메시지가 생성된다 :
포인터 투 부재 염기로부터는 그래서표준 변환 가리키는 포인터 부재 템플릿 인수 file.cc (X)에 대한인가되지 유도의 오류 C2973 : 'F': 유효 템플릿 인수 '내부의 표준 : _ Pair_base,321 0 _Ty1, _Ty2는> :: * '
std::map
에서
value_type
의 구현은 기본 클래스의 쌍 것 같다.
이 를 해결하고이 non-type-argument
로 pointer-to-member
을 유지하는 방법에 어떤 아이디어?
구조가 변경되어 f
이 functor
이고 구성원이 pointer-to-member
인 유일한 이유는 무엇입니까?
어쩌면 어리석은 질문 일지 모르지만 그 포인터를 회원에게 전달해야하는 이유는 무엇입니까? –
'::'및 다른 어휘 토큰을 둘러싼 공백은 무엇입니까? – TemplateRex
그래, 바로 앞의 질문을 명확히하는 이유는 간단'템플릿 <유형 이름 MapItemType> 부울 F (MapItemType의 CONST & v);'당신을 위해 작동하지 않습니다 –