madf: (Default)
[personal profile] madf
Хто читав Алєксандреску той знає, а хто не читав - картинко під катом:

hbuilder
Код:
template <template <typename> class TypeWrapper, typename ... Ts>
struct HBuilder;

template <template <typename> class TypeWrapper, typename T>
struct HBuilder<TypeWrapper, T> : TypeWrapper<T> {
typedef TypeWrapper<T> WrappedType;

template <typename F>
void fmap(F & f) { f(*static_cast<WrappedType *>(this)); }
};

template <template <typename> class TypeWrapper, typename T, typename ... Ts>
struct HBuilder<TypeWrapper, T, Ts ...> : TypeWrapper<T>, HBuilder<TypeWrapper, Ts ...> {
typedef HBuilder<TypeWrapper, Ts ...> Next;
typedef TypeWrapper<T> WrappedType;

template <typename F>
void fmap(F & f) { f(*static_cast<WrappedType *>(this)); Next::fmap(f); }
};
_Winnie C++ Colorizer

fmap бо там із усіх щілин стирчать вуха функтора.
Можна розглядати це як контейнер контейнерів типів.
Код було написано задовго то сортування типів, бо сортування мені знадобилось у самому кінці.

Уже як запостив - побачив. Там F & треба передавати константно. Ну то дрібниці.

У наступному пості напишу про те, нафіга все це потрібно. Яке воно має практичне застосування. Окрім fun, звісно :)

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 25th, 2025 02:09 am
Powered by Dreamwidth Studios