문자열을 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 개 표현이있다?
1 : 귀하의 기능 따라서 같은 것을 호출 할 수 있습니다. 함수 시그니처를 해독하는 것은 쉽지만 특정 의미를 이해하는 것 같지는 않습니다 :) –
@MatthieuM : iostream 조작기를 인식하기 위해 James를 "+1"하는 것은 거의 불쾌합니다. :-) 무서운 것은 응답 한 다른 세 사람이 그것을 인식하지 못했다는 것입니다. 나는 사람이 사용하는 것들을 적어도 일반적인 방식으로 알고 있어야한다고 생각한다. 건배, –
그리고 btw,이 함수가 bool 값을 반환하면 나에게 뭔가를 말해 줄 수 있습니까? 왜 실제 변환이 수행됩니까? 그것은 'return! (iss >> f >> t) .fail()'이라고 말합니다. 나는 (이 사이트는 '오류가 발생했습니다'라고 말하는 사람들이 있음에도 불구하고) 여기에서 읽었습니다. http://www.cplusplus.com/reference/iostream/ios/fail/ 'fail'함수는 true 또는 false 만 반환하고, 검사중인 명령문이 참이거나 그와 유사한 명령이면 명령을 실행하지 않습니다. ADDED : 흠, 어쩌면이 변환이 미리 수행되고 인수가 참조로 전달 되었기 때문에 나중에 사용할 수 있습니다 – user1042840