c++ - C++ 中的高阶函数,使用 std::wcout 失败并出现错误 C2248

标签 c++ functional-programming visual-c++-2010

我正在尝试用 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/

相关文章:

c++ - Chromium Embedded 如何检测我们是否作为子进程运行?

c++从不变函数返回时断言失败

c++ - 在 C++ 中的不同项目文件中将参数)传递给函数)

c++ - 即使没有按下任何按钮,事件类型也设置为 SDL_MOUSEBUTTONDOWN

C++、命名空间、继承类的名称查找和 Qt

javascript - 提高使用解构和递归处理数组的函数的性能

functional-programming - 在 map 内部使用 if 时如何处理 "if may be missing an else clause"?

bash - 仅打印其参数的函数是纯函数吗?

visual-studio - 使用标准 #ifndef MS-VC++ 覆盖 #pragma 一次

c++ - 如何在 C++11 中为 OuterClass 制作复制粘贴友好的 typedef?