Pull to refresh
1
0
Дмитрий @dima_mendeleev

User

Send message
Не знал, почитал, спасибо: это, действительно, то же. Тогда пост можно рассматривать как объяснение реализации или, возможно, другой подход.
Если нужно передавать только callback, но все же нужны для него некоторые данные, то используется функтор с полями:
struct GreaterThan // определяем
{
    const int _value;
    GreaterThan( int value ): _value(value) { };
    inline bool operator()( int arg ) { return arg > value; };
};
auto callback = GreaterThan(3); // конфигурируем

Данный же подход позволяет обойтись определением только одной функции:
inline bool gt( int x, int y ) { return x > y; }; // определяем
auto callback = partApply<1>(gt)(3); // конфигурируем
Есть возможное удобное применение — callback'и. Они используются достаточно широко и часто нужно иметь возможность их конфигурировать — я видел два варианта:
  1. 1. передавать вместе с callback'ом нужные данные, а потом во время вызова callback'а передавать их ему;
  2. 2. писать класс с полями, с помощью инициализации которых и будет конфигурироваться callback.

Данный же подход позволяет использовать лишь функцию. А при передачи ей нужных аргументов происходит то самое конфигурирование callback'а.
типизация Haskell'а намного «строже» C++ной
тут ответил, что не так уж много (точнее: много одной синтаксической хитрости), а сущность хоть и простая, но в C++ ее реализации я еще не встречал
На самом деле, все, что используется здесь, — это развертывание шаблонных типов или аргументов (pack expansion). А выглядит оно страшно только потому, что используется нетривиальным (но очевидным) способом, т.е. не просто
Templ<T...>
но и
Templ1<Templ2<T>...>
или
g(f<v>...)
а может также потому, что это фича с нового стандарта и еще мало кем используется. А все остальное — это обыкновенное ООП: несколько классов с обычными методами и конструкторами — даже наследования нету.
это соответствующий проект для CodeBlocks
12 ...
16

Information

Rating
Does not participate
Location
Украина
Registered
Activity