我正在尝试用 C++ 实现函数式风格的东西。目前,我正在研究用于枚举文件的连续传递样式。
我有一些看起来像这样的代码:
namespace directory
{
void find_files(
std::wstring &path,
std::function<void (std::wstring)> process)
{
boost::filesystem::directory_iterator begin(path);
boost::filesystem::directory_iterator end;
std::for_each(begin, end, process);
}
}
然后我这样调用它:
directory::find_files(source_root, display_file_details(std::wcout));
...其中 display_file_details
定义如下:
std::function<void (std::wstring)>
display_file_details(std::wostream out)
{
return [&out] (std::wstring path) { out << path << std::endl; };
}
计划是将延续传递给 find_files
,但能够将组合函数传递给它。
但是我得到了错误:
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' :
cannot access private member declared in
class 'std::basic_ios<_Elem,_Traits>'
我做错了什么?尝试这个我疯了吗?
注意:我的功能术语(高阶、延续等)可能是错误的。请随时纠正我。
最佳答案
在 display_file_details
中,您需要通过引用获取您的 wostream。 iostream 复制构造函数是私有(private)的。
关于c++ - C++ 中的高阶函数,使用 std::wcout 失败并出现错误 C2248,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601981/