我在C++中實現函數式的東西。目前,我正在尋找一種繼續傳遞文件的方式來枚舉文件。使用std :: wcout的C++中的高階函數失敗,出現錯誤C2248
我有一些代碼,看起來像這樣:
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
,但能夠通過COM向它提出了功能。
但我得到的錯誤:
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' :
cannot access private member declared in
class 'std::basic_ios<_Elem,_Traits>'
我在做什麼錯?我爲此嘗試瘋了嗎?
注:我的功能術語(高階,延續等)可能是錯誤的。隨時糾正我。
您無法通過值傳遞wostream。僅供參考。 'std :: wostream&out' –
爲什麼'display_file_details'是一個生成器而不是實際的函數? –
因爲我在玩耍,這就是我在功能風格的C#或F#中所做的。如果我在考慮C++ 03,我想可以使用'bind'。 –