我想使用for_each函数将一个对象输出到文件中,听起来很疯狂,但它有可能吗?我试过自己,但似乎没有用。以下是我到目前为止所做的事情:
//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将对象输出到文件的任何想法? 提前谢谢!
答案 0 :(得分:1)
尝试类似:
for_each(arr,arr+5, bind2nd(fefnptr<Sterling>(), fp));
答案 1 :(得分:1)
您应该将fp
的指针或引用传递给fefnptr
的构造函数并将其存储在该对象中。所以写一个合适的构造函数,你不需要这个简单的(,fp)
,只需要fefnptr<Sterling>(&fp)
传递引用的好处是代码看起来更好。传递指针的好处是你不能随意将临时值传递给超过它的东西的构造函数。
此外,您应该使用std::copy
和ostream迭代器,而不是for_each
,但您最了解自己的想法; - )
答案 2 :(得分:0)
有可能,正如其他答案所示,但(IMO)更清洁的解决方案是使用std::copy
和流迭代器:
std::copy(arr, arr+5, std::ostream_iterator<Sterling>(fp));