У меня возникли проблемы с попыткой использовать ifstream
изнутри блока. (. Это является частью более крупного, сложного проекта, поэтому я взбитыми быстрый небольшой исходный файл только с соответствующими частями)Как использовать std :: fstream изнутри блока?
// foo.cpp, in its entirety:
#include <iostream>
#include <fstream>
#include <Block.h>
int main() {
__block std::ifstream file("/tmp/bar") ;
//^tried this with and without the __block
void (^block)() = ^{
file.rdbuf() ;
file.close() ;
file.open("/tmp/bar") ;
} ;
block() ;
}
Если я объявляю ifstream
с __block
, я получаю:
foo.cpp:6:24: error: call to implicitly-deleted copy constructor of
'std::ifstream' (aka 'basic_ifstream<char>')
__block std::ifstream file("/tmp/bar") ;
^~~~
Если я объявляю его без __block
, я получаю:
foo.cpp:8:3: error: call to implicitly-deleted copy constructor of
'const std::ifstream' (aka 'const basic_ifstream<char>')
file.rdbuf() ;
^~~~
// rdbuf() and (presumably) other const functions
foo.cpp:9:3: error: member function 'close' not viable: 'this' argument has
type 'const std::ifstream' (aka 'const basic_ifstream<char>'), but
function is not marked const
file.close() ;
^~~~
// open(), close(), and (presumably) other non-const functions
Что такое правильный способ использовать fstream
S внутри блоков?
Я не знаю, что такое объективный блок c, но вы могли бы использовать лямбда? – Pubby
@Pubby Я не знаю, что такое лямбда, поэтому вместо этого я использую блоки Objective-C. XD –
Это 'C++/CLI', а не' C++', правильно? – us2012