locale 객체 인자의 리퍼런스 전달

0
points

std::string 객체에 담긴 문자열을 소문자로 바꾸고자 다음과 같은 코드를 썼습니다.

transform( s.begin(), s.end(), s.begin(), bind2nd( ptr_fun( tolower<char> ), locale("english") ) );

그런데 알 수 없는 에러를 내더군요

361: error: forming reference to reference type `const std::locale&'

아마도, locale 객체의 리퍼런스에 대한 리퍼런스를 만드려는 시도가 실패한거 같은데, 위 코드를 어떻게 고쳐야 적절히 컴파일 되는 코드가 될까요?

PS : 현재는 C의 tolower()함수를 써서
transform( s.begin(), s.end(), s.begin(), ptr_fun( tolower ) );
와 같이 해결하고 있습니다.

doldori의 이미지
5441
points

말 그대로 참조에 대한 참조는 허용되지 않기 때문입니다. 불행히도 현재

0
points

말 그대로 참조에 대한 참조는 허용되지 않기 때문입니다. 불행히도 현재 표준에서 제공하는
binder로는 해결이 불가능합니다. 현재 진행중인 표준 개정 작업에서 issue list에
들어가 있다고 하니 차기 표준에서는 어떤 식으로든 해결이 될 것으로 보입니다.
이미 하신 것처럼 C의 tolower를 쓰거나 boost의 binder를 쓰는 방법도 있습니다.

http://www.boost.org/libs/functional/binders.html

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.