↑↑↓↓←→←→ⒷⒶ Войти !bnw Сегодня Клубы
c++

Все мы любим частично специализировать шаблоны.
Вот примерно так:

template <class>
struct Flip;

template <class A, class B>
struct Flip <std::pair<A, B>>
{};

template <class A>
struct Flip <std::array<A, 2>>
{};

Неудобно, что перед тем как использовать новое имя в аргументах, его нужно сначала объявить в параметрах шаблона.
Из-за этого код бывает многословным:

template <class T, T A, class B>
struct Cons;

template <class T, template<T...>class Arr, T Head, T...Tail>
struct Сons <T, Head, Arr<Tail...>>
{};

Что, если сделать специальный синтаксический сахар (с транслятором в стандартные кресты) для того, чтобы можно было делать объявления прямо внутри аргументов?

template <>
struct Flip <std::pair<class A, class B>>
{};

template <>
struct Flip <std::array<class A, 2>>
{};

template <template<class T...>class Arr>
struct cons <T Head, Arr<T...Tail>>
{};

template <> без параметров можно опустить.
Вместо template<class T...>class Arr в объявлении можно писать class Arr<T...>.
И заменить ключевое слово class на @.

struct Flip <std::pair<@A, @B>>
{};

struct Flip <std::array<@A, 2>>
{};

template <@Arr<@T...>>
struct cons <T Head, Arr<T...Tail>>
{};

Да, не стоит забывать, что объявленное можно использовать более одного раза. Следующие строки эквивалентны:

template <class A> struct Eq <A, A> {};
struct Eq <@A, @A> {};
struct Eq <@A, A> {};

С таким сахаром писать на крестах будет немного проще.

#RAVCCQ / @fix / 3601 день назад

ты больной уёбок

#RAVCCQ/KSZ / @hirthwork / 3601 день назад
@hirthwork бан
#RAVCCQ/B62 / @fix --> #RAVCCQ/KSZ / 3601 день назад

@fix лан

#RAVCCQ/3A9 / @hirthwork --> #RAVCCQ/B62 / 3601 день назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.