Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / элегантный scope deleter c++ (2 стр)

элегантный scope deleter c++ (2 стр)

Страницы: 1 2
DelfigamerПостоялецwww4 июня 201816:46#15
Ну так-то происходящее в этом треде - это, по сути, реализация finally - что по семантике является скорее языковой фичей, чем участвующим в алгоритмах шаблоном, и потому вполне достойна реализации через препроцессор.
fsmokeПостоялецwww4 июня 201817:03#16
Delfigamer
> что по семантике является скорее языковой фичей
я об этом и говорю

но всё же хочется увидеть её в виде конструкции языка нежели воротить макросами

gammakerПостоялецwww4 июня 201821:30#17
fsmoke
> Здарова старина - давно не слышал тебя - надо будет скачать твою либу,
> посмотреть..  не сдался ещё :)  - это радует
Привет! Прошло почти 7 лет с тех пор, как мы обсуждали наши строки )
Движок я свой всё-таки забросил, как понял, что надо переделывать вообще почти всё, а времени не было. Но строки и всё остальное перекочевали в библиотеку на гитхабе, были доработаны и несколько раз переработаны. И появилось куча всего нового интересного, главным образом, диапазоны (range) - ещё более обобщённые и мощные, чем в языке D, не смотря на то, что в D шаблоны и метапрограммирование круче и с ними такие штуки на порядок проще делаются. Даже потоки ввода-вывода стали частным случаем диапазонов.
Последний год почти не занимался библиотекой, потому что времени совсем нет, но очень хочется продолжить и доделать.
Если захочешь обсудить, пиши в мою тему или в личку.
=A=L=X=Постоялецwww5 июня 20189:55#18
fsmoke
> хочется увидеть её в виде конструкции языка нежели воротить макросами

Странное желание для языка где даже встроенных строк нет.
Вообще FINALLY в С++-style, имхо, рвёт все остальные реализации finally в языках как тузик грелку.
Подвязывать код деинициализации ресурса прямо по месту его инициализации - дорогого стоит.
Типа так:

FILE *f = fopen( ... );
FINALLY( 
  if ( f )
    fclose( f ); 
  whatsoever...
);
...
Ну просто же боньба! Причём если в других языках finally впрягают в механизм обработки исключений, то здесь исключения глубоко параллельны, однако тоже органически работают как предполагается.

=A=L=X=Постоялецwww5 июня 201810:16#19
Да и кода там не особо много, по ситуации конечно, но можно и в пятнадцать строк уложится:
template<typename T>
class Deleter
{
        T x;
public:
        inline Deleter( const T& functor ): x(functor) { };
        inline ~Deleter() { x(); };
};

template<typename T>
inline Deleter<T> finally( const T& x )
{
        return Deleter<T>(x);
};

#define FINALLY_IMPL(line, code) auto deleter##line = finally( [&]() { code; } );
#define FINALLY(code) FINALLY_IMPL(__LINE__, code)
+ тест

Поэтому переживать что его недоложили в стандартные либы смысла не имеет.

Правка: 5 июня 2018 10:18

Страницы: 1 2

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр