midnight commander steps
Она любила запах кофе по утрам. Налив в свою самую любимую кружку свежесваренный, обжигающе-горячий, ароматный и бодрящий темный напиток, что буквально пару минут назад был обычными кофейными зернами, Анна ленивой, но одновременно летящей грациозной походкой подошла к огромному стеклянному панорамному окну в потолок. Она аккуратно сделала один маленький, крошечный глоток, позволяя этой поистине божественной жидкой субстанции растечься по всему своему хрупкому телу приятным и нежным теплом. Откинув с помощью своей собственной свободной руки назад длинную прядь аспидно-черных, как само крыло ворона, непослушных волос, молодая девушка устремила свой глубокий задумчивый взор в далекую голубую даль, созерцая прекрасные открывающиеся виды просыпающегося человеческого мегаполиса. Жизнь там, за прозрачным стеклом окна, уже вовсю била бурным ключом: во все стороны активно сновали курьеры с коробками, куда-то быстро бежали питонисты, сонными мухами ползали адепты Эрланга. Здесь же, внутри ее маленького, комфортного и напоенного дремой мирика, неумолимое время словно бы полностью остановилось. Она просто стояла на ногах стоя, искренне наслаждаясь текущим моментом и глубоко думая в своей голове о том, что же именно принесет ей этот абсолютно новый, неизведанный и загадочный день.
Скорее всего, она навестит еще десяток авторов, начинающих рассказ с описания утреннего кофе, теплыми волнами растекающегося по телам молодых и не очень женщин. Анна с улыбкой погладила лежащий на столе Ремингтон 870.
"Готовьтесь, гады, - зловещая веселость охватила ее, - всех вас по айпи вычислила!"
Коснувшись экрана смартфона, Анна быстро пролистала список.
В самом низу были адреса толмачей, победителей переводческих конкурсов и любителей буржуйских имажистов. Именно благодаря их усилиям утро теперь невозможно начать с чтения переводной литературы.
Она поморщилась, вспоминая, как некто все еще "зеленеет от страха" вместо того, чтобы нормально побледнеть.
Взгляд скользнул по списку выше. Там засели авторы самопальных бытовых рассказов-слезодавилок, извергающие потоки брошенных домашних животных, позабытых стареньких родителей, злобных роботов-поработителей и любовей всех мастей вопреки всем невзгодам.
Мысленно отметив, что с этим контингентом придется повозиться - адресов стало еще больше, - Анна перешла к вершине списка.
Самые отъявленные негодяи. Авторы неудобоваримых плюсовых библиотек. Вместо поцелуя устраивающие специальную олимпиаду в вычурности конструкций.
Казалось бы, зачем пользователю выдавать чистые врапперы вроде:
struct A {};
struct B {};
template <template <typename...> class Wrapper, class ... T>
using WrapA = Wrapper<A, T...>;
template <template <typename...> class Wrapper, class ... T>
using WrapB = Wrapper<B, T...>;
Для двух случаев разработчику предлагаются два разных враппера, как хочешь это потом и используй.
Тут особенность в том, что первым передается тип контейнера.
static_assert(std::is_same_v<WrapA<std::tuple, B>, std::tuple<A, B>>);
Ну, это и ежу понятно. А может быть, пользователю нужно протащить эту обертку внутрь класса, чтоб там применить на каких-нибудь внутренних типах?
template <??? Wrapper>
struct Config {
public:
struct C {};
using Type = Wrapper<std::tuple, C>;
};
Конечно! Очень странно, что такой простой вопрос поставил местный ИИ в тупик. Начались какие-то дикие теории, почему это невозможно сделать. Это печально. Современные реалии требуют от современных библиотек простоты, чтоб их понимал даже ИИ.
Итого, шаблон будет выглядеть вот так:
template <template <template <typename...> class, class ...> class Wrapper>
struct Config {...}
Картинка в картинке, элементарно! Хотя можно же как-то дружелюбней делать, грациозно, чтоб можно масштабировать или плагин сделать...
Впрочем, что́ изменнику блаженства звуки? Миги жизни сочтены.
Она любила запах кофе по утрам. Налив в свою самую любимую кружку свежесваренный, обжигающе-горячий, ароматный и бодрящий темный напиток, что буквально пару минут назад был обычными кофейными зернами, Анна ленивой, но одновременно летящей грациозной походкой подошла к огромному стеклянному панорамному окну в потолок. Она аккуратно сделала один маленький, крошечный глоток, позволяя этой поистине божественной жидкой субстанции растечься по всему своему хрупкому телу приятным и нежным теплом. Откинув с помощью своей собственной свободной руки назад длинную прядь аспидно-черных, как само крыло ворона, непослушных волос, молодая девушка устремила свой глубокий задумчивый взор в далекую голубую даль, созерцая прекрасные открывающиеся виды просыпающегося человеческого мегаполиса. Жизнь там, за прозрачным стеклом окна, уже вовсю била бурным ключом: во все стороны активно сновали курьеры с коробками, куда-то быстро бежали питонисты, сонными мухами ползали адепты Эрланга. Здесь же, внутри ее маленького, комфортного и напоенного дремой мирика, неумолимое время словно бы полностью остановилось. Она просто стояла на ногах стоя, искренне наслаждаясь текущим моментом и глубоко думая в своей голове о том, что же именно принесет ей этот абсолютно новый, неизведанный и загадочный день.
Скорее всего, она навестит еще десяток авторов, начинающих рассказ с описания утреннего кофе, теплыми волнами растекающегося по телам молодых и не очень женщин. Анна с улыбкой погладила лежащий на столе Ремингтон 870.
"Готовьтесь, гады, - зловещая веселость охватила ее, - всех вас по айпи вычислила!"
Коснувшись экрана смартфона, Анна быстро пролистала список.
В самом низу были адреса толмачей, победителей переводческих конкурсов и любителей буржуйских имажистов. Именно благодаря их усилиям утро теперь невозможно начать с чтения переводной литературы.
Она поморщилась, вспоминая, как некто все еще "зеленеет от страха" вместо того, чтобы нормально побледнеть.
Взгляд скользнул по списку выше. Там засели авторы самопальных бытовых рассказов-слезодавилок, извергающие потоки брошенных домашних животных, позабытых стареньких родителей, злобных роботов-поработителей и любовей всех мастей вопреки всем невзгодам.
Мысленно отметив, что с этим контингентом придется повозиться - адресов стало еще больше, - Анна перешла к вершине списка.
Самые отъявленные негодяи. Авторы неудобоваримых плюсовых библиотек. Вместо поцелуя устраивающие специальную олимпиаду в вычурности конструкций.
Казалось бы, зачем пользователю выдавать чистые врапперы вроде:
struct A {};
struct B {};
template <template <typename...> class Wrapper, class ... T>
using WrapA = Wrapper<A, T...>;
template <template <typename...> class Wrapper, class ... T>
using WrapB = Wrapper<B, T...>;
Для двух случаев разработчику предлагаются два разных враппера, как хочешь это потом и используй.
Тут особенность в том, что первым передается тип контейнера.
static_assert(std::is_same_v<WrapA<std::tuple, B>, std::tuple<A, B>>);
Ну, это и ежу понятно. А может быть, пользователю нужно протащить эту обертку внутрь класса, чтоб там применить на каких-нибудь внутренних типах?
template <??? Wrapper>
struct Config {
public:
struct C {};
using Type = Wrapper<std::tuple, C>;
};
Конечно! Очень странно, что такой простой вопрос поставил местный ИИ в тупик. Начались какие-то дикие теории, почему это невозможно сделать. Это печально. Современные реалии требуют от современных библиотек простоты, чтоб их понимал даже ИИ.
Итого, шаблон будет выглядеть вот так:
template <template <template <typename...> class, class ...> class Wrapper>
struct Config {...}
Картинка в картинке, элементарно! Хотя можно же как-то дружелюбней делать, грациозно, чтоб можно масштабировать или плагин сделать...
Впрочем, что́ изменнику блаженства звуки? Миги жизни сочтены.