2011-12-09 5 views
3

문자열을 int로 변환하는 가장 좋은 방법을 찾고 있었고 이해할 수없는 함수를 발견했습니다 :무엇을 의미합니까 : 'std :: ios_base & (* f) (std :: ios_base &))'

내가 무엇 템플릿을 알고
template <class T> 
bool from_string(T& t, 
       const std::string& s, 
       std::ios_base& (*f)(std::ios_base&)) 
{ 
    std::istringstream iss(s); 
    return !(iss >> f >> t).fail(); 
} 

, 나는 그것이 무엇을 의미하는지 모르는 :

std::ios_base& (*f)(std::ios_base&) 

여기에서 생성되는 새로운 포인터가 왜 서로 옆에 괄호 안에 2 개 표현이있다?

답변

5

std::ios_base&을 인수로 사용하고 std::ios_base&을 반환하는 함수에 대한 포인터입니다.

실제로 이것은 인수를 취하지 않는 조작자의 한 형태입니다. 이 유형의 << 오버로드는 단순히 함수를 호출합니다. 그러면 함수는 스트림에서 좋아하는 내용을 반환하고 반환합니다. ostream에 조종 서명을 인식

from_string(anInt, "0A", &std::hex); 
+0

1 : 귀하의 기능 따라서 같은 것을 호출 할 수 있습니다. 함수 시그니처를 해독하는 것은 쉽지만 특정 의미를 이해하는 것 같지는 않습니다 :) –

+0

@MatthieuM : iostream 조작기를 인식하기 위해 James를 "+1"하는 것은 거의 불쾌합니다. :-) 무서운 것은 응답 한 다른 세 사람이 그것을 인식하지 못했다는 것입니다. 나는 사람이 사용하는 것들을 적어도 일반적인 방식으로 알고 있어야한다고 생각한다. 건배, –

+0

그리고 btw,이 함수가 bool 값을 반환하면 나에게 뭔가를 말해 줄 수 있습니까? 왜 실제 변환이 수행됩니까? 그것은 'return! (iss >> f >> t) .fail()'이라고 말합니다. 나는 (이 사이트는 '오류가 발생했습니다'라고 말하는 사람들이 있음에도 불구하고) 여기에서 읽었습니다. http://www.cplusplus.com/reference/iostream/ios/fail/ 'fail'함수는 true 또는 false 만 반환하고, 검사중인 명령문이 참이거나 그와 유사한 명령이면 명령을 실행하지 않습니다. ADDED : 흠, 어쩌면이 변환이 미리 수행되고 인수가 참조로 전달 되었기 때문에 나중에 사용할 수 있습니다 – user1042840

2

이것은 std::ios_base&을 가져오고 std::ios_base&을 반환하는 함수에 대한 포인터 f의 선언입니다.

1

std::ios_base&을 반환하고 std::ios_base&을 단일 인수로받는 함수 포인터는 f입니다.

관련 문제