2011-05-13 6 views
0

for_each 함수를 사용하여 파일에 객체를 출력하고 싶습니다. 미친 것처럼 들리지만 가능합니까?. 나는 나 자신을 시도했지만 효과가없는 것 같다.for_each를 사용하여 파일에 데이터 출력 C++?

//Sterling.h 


     template<class T> 
void myfn(const T& t, const iostream& io = cout) 
{ 
     io << t; 
} 

template<class T> 
class fefnptr{ 
     public: 
       void operator()(const T& t, const iostream& io = cout) const 
       { 
         io << t; 
       } 
}; 

class Sterling{ 
// also implement the operator<< and other functions in Sterling.cpp 
}; 

//main.cpp 
int main(){ 
     fstream fp("test",fstream::out); 
     if(!fp) cerr << "Unable to open the file\n"; 
     else 
     { 
       for_each(arr,arr+5,fefnptr<Sterling>(,fp)); // the syntax here is wrong and 
I know that but I just want to put the fp as an parameter to output the object to the file 
     } 
     fp.close(); 
return 1; 
} 

을 그리고 오류 (물론 나는 그것이 무엇인지 알고)없는 매개 변수를 (그것이 내가 파일을 출력 할 개체입니다) 밝혀 : 여기에 지금까지 한 일이다. 그래서 for_each를 사용하여 파일에 객체를 출력하는 방법은 무엇입니까? 미리 감사드립니다. fefnptr의 생성자에 당신은 통과해야

for_each(arr,arr+5, bind2nd(fefnptr<Sterling>(), fp)); 
+2

왜 사용할까요'for_each' : 청소기 솔루션은 std::copy과 스트림 반복자를 사용하는 것입니다? 'std :: ostream_iterator'와 함께'std :: copy'를 사용하지 않을까요? –

답변

1

같은 것을보십시오. 따라서 적절한 생성자를 작성하면이 코드를 작성하지 않아도됩니다. fefnptr<Sterling>(&fp)

참조를 전달하는 장점은 코드가 더 멋지게 보인다는 것입니다. 포인터를 전달할 때의 이점은 부주의하게 임시로 생성자를 생성자로 전달할 수 없다는 것입니다.

또한, 당신이 for_each보다는, 이것에 대한 std::copy과 ostream에 반복자를 사용한다, 그러나 당신이 당신의 자신의 마음을 알고 최고의 ;-)

+0

오, 그래, 좋은 지적이야. (typo : bind2d) –

1

(포인터 또는 참조로) fp 해당 객체에 저장 :

+0

참조가 여전히 작동합니까? 'for_each'는 펑터가 copy-constructible이고, 할당 가능하지 않습니다. afaik – jalf

+0

@jalf : 그렇다면 그렇습니다. 나는 표준이 실제로 CopyConstructible이어야한다고 말하지는 않는다. (비록 값으로 전달 되었기 때문에 말하지는 않겠지 만) 당신이 옳을 것으로 기대한다. 솔직히 말해서 내가 일반적으로 포인터를 저장하는 이유는 내가 일반적으로 포인터를 전달한다는 것입니다. –

0

그것은 다른 답변이 표시로, 수 있지만 (IMO)

std::copy(arr, arr+5, std::ostream_iterator<Sterling>(fp)); 
관련 문제