13.12.2013, 18:58
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от monolithed
|
C++14 пока даже финального драфта нет, но Сlang и GCC49 уже поддерживают его большую часть.
Про С14 я не слышал.
|
Ну знач С11 Я прост на опен нете читал, что Clang объявил о 100% поддержке 14-го стандарта, вот я грешным делом и подумал
|
|
13.12.2013, 18:59
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Дзен-трансгуманист
|
Моя первая нога. Ща уже точно не помню, но примерно так...
|
ОМГ, у тебя как минимум нет delete [] pData.
/** 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, хотя он легко и пишется
Сообщение от kobezzza
|
Clang объявил о 100% поддержке 14-го стандарта
|
Clang плохого не посоветует )
Последний раз редактировалось monolithed, 13.12.2013 в 19:25.
|
|
13.12.2013, 19:11
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от monolithed
|
у тебя как минимум нет delete [] pData.
|
Я сократил для наглядности, дело там не в delete.
Смутить тебя должно было, что я возвращаю указатель на стэковый инстанс, который еще и на верочку затираю другими вызовами. И что у нас в итоге по адресу textFile? У меня там был какой-то ад, полминуты своппинга и uncaught exception на закуску.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 13.12.2013 в 19:21.
|
|
13.12.2013, 19:19
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Дзен-трансгуманист
|
У меня там был какой-то ад
|
Да уж, все эти указатели и адресная арифметика очень опасная вещь.
Печально что даже смартпоинтеры могут выстрелить в ногу.
|
|
13.12.2013, 19:29
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от monolithed
|
адресная арифметика очень опасная вещь
|
Бывало, что, например, лень писать sizeof(unsigned int), просто пишешь 4. Ну и где-то не очень угадываешь))
Или выравнивание в структуре не учел: сложил int и char, получил для следующего int'a смещение 5. И запорол.
Второпях в основном такие приколы получаются.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 13.12.2013 в 19:36.
|
|
13.12.2013, 19:40
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Дзен-трансгуманист
|
Бывало, что, например, лень писать sizeof(unsigned int), просто пишешь 4
|
К счастью после выхода С++11 нужна в указании количества байтов практически отпала, да и std::size_t всяко лучше юзать чем unsigned int
Последний раз редактировалось monolithed, 13.12.2013 в 19:49.
|
|
13.12.2013, 20:03
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от monolithed
|
К счастью после выхода С++11 нужна в указании количества байтов практически отпала
|
Для двоичного I/O, тем не менее, никогда не отпадет нужда строго задавать размеры. А для чисел еще и endianness учитывать.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 13.12.2013 в 20:09.
|
|
13.12.2013, 20:07
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Дзен-трансгуманист
|
Для двоичного I/O, тем не менее, никогда не отпадет нужда строго задавать размеры.
|
Приведи плиз пример
|
|
13.12.2013, 20:17
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от monolithed
|
Приведи плиз пример
|
Ты серьезно? Любой бинарный файл прочти или запиши кроссплатформенно.
std::size_t это только к тому, что касается целевой платформы.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 13.12.2013 в 20:47.
|
|
13.12.2013, 20:46
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Дзен-трансгуманист
|
Любой бинарный файл прочти или запиши кроссплатформенно.
|
#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;
}
Или я чего-то не знаю?
Последний раз редактировалось monolithed, 13.12.2013 в 20:50.
|
|
|
|