Я хотел бы, чтобы уменьшить размер кода путем связывания общих аргументов (в то числе открытого ofstream) к функции называется несколько раз, но как лязга и G отказывается скомпилировать эту программу:Почему нельзя связать связь с привязкой?
#include "functional"
#include "fstream"
using namespace std;
void writer(ofstream& outfile, int a) {
outfile << "asdf " << a;
}
int main() {
ofstream outfile("test");
writer(outfile, 3);
auto writer2 = bind(writer, outfile, placeholders::_1);
writer2(1);
writer2(2);
writer2(3);
return 0;
}
Clang ошибка не выглядит полезно, но НКУ дает:
/opt/local/gcc-4.9.1/include/c++/4.9.1/tuple:140:42: error: use of deleted function ‘std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)’
: _M_head_impl(std::forward<_UHead>(__h)) { }
^
In file included from testi.cpp:2:0:
/opt/local/gcc-4.9.1/include/c++/4.9.1/fstream:602:11: note: ‘std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
class basic_ofstream : public basic_ostream<_CharT,_Traits>
^
я делаю что-то неправильно или связывание ofstream не представляется возможным (почему нет)?
Спасибо, я бы это обработал автоматически, поскольку bind принимает свои аргументы как && (согласно cppreference). – user3493721
@ user3493721, он принимает аргументы путем перенаправления ссылок, но затем он копирует эти аргументы. [cppreference] (http://en.cppreference.com/w/cpp/utility/functional/bind) объясняет, что если вы продолжаете читать: _ «один объект на каждый из« args ... », типа' std: : decay :: type', аналогично построенный из 'std :: forward (arg_i)' "_ –