C++ STL에서 men_fun와 bind1st에 오래 된 문제 :이 코드를 지금몇 가지 간단한 코드는 문제를 설명 할 것이다
class Foo {};
struct Bar {
bool foo(const Foo &f) const { return false; }
};
int main() {
Bar bar;
vector<Foo> v;
std::find_if(v.begin(), v.end(), std::bind1st(
std::mem_fun_ref(&Bar::foo), bar));
return 0;
}
는 VS2010의 C++ 컴파일러는 불평 할 것이다 : 오류 C2535를 : 부울 표준 : binder1st < _Fn2> :: 연산자() (const를 푸 &) CONST : 이미 이전 버전의 Visual Studio에 선언
의 정의 멤버 함수 문제를 참조하기 위해 참조하는 관련이 두 개 더 컴파일 오류가있을 것입니다. VS2010에서는 이러한 문제가 발생했지만 C2535는 여전히 남아 있습니다.
이 질문은 this one과 유사합니다. 해당 게시물에 의해 제안 된 것처럼, 나는 std :: bind 또는 boost 라이브러리를 대안으로 사용할 수있다. 그들은 잘 작동하지만, 지금은,이 경우에 이전 bind1st 스타일을 사용하는 것이 가능한지 알고 싶습니다 또는 STL 기능 프레임 워크에 내재 된 결함이 문제가 더 무엇입니까? 감사합니다.
나는 이것이 사실이 아니라고 생각합니다. 'mem_fun_ref'는 하나의 인수를 취하는 멤버 함수에 과부하가 있습니다. 반환 유형은 binary_function의 하위 유형 인'const_mem_fun1_ref_t <_Result, _Ty, _Arg>'입니다. VS2010의 경우 헤더 파일에 정의되어 있습니다. –
weidi
@weidi'[deprecated.member.pointer.adaptors]'의 D8.2.2에서'const_mem_fun_ref_t'의 정의를 찾을 수 있습니다. MSVC 확장 프로그램을보고있을 것입니다. MSDN (머리글조차도 포함되지 않음)에서 해당 설명서를 찾을 수 없습니다. – pmr
MSDN 설명서는 [this] (http://msdn.microsoft.com/en-us/library/etctxx69(v=vs.100).aspx)입니까? 미안해, 내가 잘못 이해했다면. 난 정말 다양한 C++ 문서에 대해 많이 몰라서 나는 D8.2.2가 무엇을 가리키는 지 전혀 모른다. 어댑터의 비추천이 언급되는 링크를 공유 할 수 있습니까? – weidi