Цитата:
|
Цитата:
/** open_file */
template <typename __type, typename __stream>
inline bool open_file (const std::string &name, __stream &open, std::ios_base::openmode mode = {})
{
open = make_unique<stream<__type>>(name);
auto file = &open->file;
(*file)->open(name, mode |= std::ios::binary);
return (*file)->is_open();
}
/** read_file */
inline const std::string read_file (const std::string &name)
{
std::string content;
std::unique_ptr<stream<std::ifstream>> open;
if (!open_file<std::ifstream>(name, open))
return content;
using buffer = std::istreambuf_iterator<char>;
content.assign((buffer(*open->file)), buffer());
return content;
}
make_unique есть в C++14, хотя он легко и пишется :) Цитата:
|
Цитата:
Смутить тебя должно было, что я возвращаю указатель на стэковый инстанс, который еще и на верочку затираю другими вызовами. И что у нас в итоге по адресу textFile? :) У меня там был какой-то ад, полминуты своппинга и uncaught exception на закуску. :D |
Цитата:
Печально что даже смартпоинтеры могут выстрелить в ногу. |
Цитата:
Или выравнивание в структуре не учел: сложил int и char, получил для следующего int'a смещение 5. И запорол. Второпях в основном такие приколы получаются. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
std::size_t это только к тому, что касается целевой платформы. |
Цитата:
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <iterator>
#include <vector>
int main () {
std::wifstream file('file.png', std::ios::binary);
if (file.fail())
throw std::runtime_error('failed to open the file');
std::vector<wchar_t> data;
using buffer = std::istreambuf_iterator<wchar_t>;
std::copy(buffer(file), buffer(), std::back_inserter(data));
for (auto chunk : data)
std::cout << chunk << std::endl;
return 0;
}
Или я чего-то не знаю? |
| Часовой пояс GMT +3, время: 13:07. |