Я играю с реализацией вещей в функциональном стиле на 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>'
Что я делаю не так?Я безумен, пытаясь это сделать?
Примечание: моя функциональная терминология (высшего порядка, продолжения и т. Д.), Вероятно, неверна.Не стесняйтесь поправлять меня.