C+中的高阶函数+;,使用std::wcout失败,错误为C2248 我正在玩C++中实现功能性风格的东西。目前,我正在研究用于枚举文件的延续传递样式

C+中的高阶函数+;,使用std::wcout失败,错误为C2248 我正在玩C++中实现功能性风格的东西。目前,我正在研究用于枚举文件的延续传递样式,c++,functional-programming,visual-c++-2010,C++,Functional Programming,Visual C++ 2010,我有一些代码如下所示: namespace directory { void find_files( std::wstring &path, std::function<void (std::wstring)> process) { boost::filesystem::directory_iterator begin(path); boost::filesystem::directory_ite

我有一些代码如下所示:

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));
std::function<void (std::wstring)>
    display_file_details(std::wostream out)
{
    return [&out] (std::wstring path) { out << path << std::endl; };
}
…其中,
display\u file\u details
的定义如下:

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));
std::function<void (std::wstring)>
    display_file_details(std::wostream out)
{
    return [&out] (std::wstring path) { out << path << std::endl; };
}
我做错了什么?我这么做是不是疯了


注意:我的函数术语(高阶、连续等)可能是错误的。请随时更正。

显示文件\u详细信息
中,您需要通过引用获取您的wostream。iostream复制构造函数是私有的。

显示\u文件\u详细信息
中,您需要通过引用获取wostream。iostream复制构造函数是私有的。

深入研究编译器输出后,我发现:

This diagnostic occurred in the compiler generated function
    'std::basic_ostream<_Elem,_Traits>::
        basic_ostream(const std::basic_ostream<_Elem,_Traits> &)'

在深入查看编译器输出后,我发现:

This diagnostic occurred in the compiler generated function
    'std::basic_ostream<_Elem,_Traits>::
        basic_ostream(const std::basic_ostream<_Elem,_Traits> &)'

不能按值传递wostream。仅通过引用
std::wostream&out
为什么
display\u file\u details
是一个生成器而不是一个实际的函数?因为我在玩游戏,这就是我用函数式C或F来做的。如果我在考虑C++03,我想我可以使用
bind
。哦,我没有注意到
display\u file\u details
使用的参数与其返回的函数不同。没关系。你不能按值传递wostream。仅通过引用
std::wostream&out
为什么
display\u file\u details
是一个生成器而不是一个实际的函数?因为我在玩游戏,这就是我用函数式C或F来做的。如果我在考虑C++03,我想我可以使用
bind
。哦,我没有注意到
display\u file\u details
使用的参数与其返回的函数不同。没有关系。