Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как бы скоро не пришлось писать на Dart, TypeScript ... (https://javascript.ru/forum/offtopic/42980-kak-skoro-ne-prishlos-pisat-na-dart-typescript.html)

kobezzza 13.12.2013 18:58

Цитата:

Сообщение от monolithed (Сообщение 286511)
C++14 пока даже финального драфта нет, но Сlang и GCC49 уже поддерживают его большую часть.
Про С14 я не слышал.

Ну знач С11:) Я прост на опен нете читал, что Clang объявил о 100% поддержке 14-го стандарта, вот я грешным делом и подумал

monolithed 13.12.2013 18:59

Цитата:

Сообщение от Дзен-трансгуманист
Моя первая нога. Ща уже точно не помню, но примерно так...

ОМГ, у тебя как минимум нет 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 плохого не посоветует )

Дзен-трансгуманист 13.12.2013 19:11

Цитата:

Сообщение от monolithed
у тебя как минимум нет delete [] pData.

Я сократил для наглядности, дело там не в delete.
Смутить тебя должно было, что я возвращаю указатель на стэковый инстанс, который еще и на верочку затираю другими вызовами. И что у нас в итоге по адресу textFile? :) У меня там был какой-то ад, полминуты своппинга и uncaught exception на закуску. :D

monolithed 13.12.2013 19:19

Цитата:

Сообщение от Дзен-трансгуманист
У меня там был какой-то ад

Да уж, все эти указатели и адресная арифметика очень опасная вещь.
Печально что даже смартпоинтеры могут выстрелить в ногу.

Дзен-трансгуманист 13.12.2013 19:29

Цитата:

Сообщение от monolithed
адресная арифметика очень опасная вещь

Бывало, что, например, лень писать sizeof(unsigned int), просто пишешь 4. Ну и где-то не очень угадываешь))
Или выравнивание в структуре не учел: сложил int и char, получил для следующего int'a смещение 5. И запорол.
Второпях в основном такие приколы получаются.

monolithed 13.12.2013 19:40

Цитата:

Сообщение от Дзен-трансгуманист
Бывало, что, например, лень писать sizeof(unsigned int), просто пишешь 4

К счастью после выхода С++11 нужна в указании количества байтов практически отпала, да и std::size_t всяко лучше юзать чем unsigned int

Дзен-трансгуманист 13.12.2013 20:03

Цитата:

Сообщение от monolithed
К счастью после выхода С++11 нужна в указании количества байтов практически отпала

Для двоичного I/O, тем не менее, никогда не отпадет нужда строго задавать размеры. А для чисел еще и endianness учитывать.

monolithed 13.12.2013 20:07

Цитата:

Сообщение от Дзен-трансгуманист
Для двоичного I/O, тем не менее, никогда не отпадет нужда строго задавать размеры.

Приведи плиз пример

Дзен-трансгуманист 13.12.2013 20:17

Цитата:

Сообщение от monolithed
Приведи плиз пример

Ты серьезно? Любой бинарный файл прочти или запиши кроссплатформенно.
std::size_t это только к тому, что касается целевой платформы.

monolithed 13.12.2013 20:46

Цитата:

Сообщение от Дзен-трансгуманист
Любой бинарный файл прочти или запиши кроссплатформенно.


#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, время: 12:35.