Александр
спасибо
Александр
https://github.com/fnc12/sqlite_orm крутая тема
ep
https://github.com/fnc12/sqlite_orm крутая тема
Последнее время стал замечать, что современные библиотеки на C++ стараются делать "header only". Некоторые даже переписывают специально для этого.
Nik
https://github.com/fnc12/sqlite_orm крутая тема
make_column("id", &User::id, autoincrement(), primary_key()), Когда уже завезут рефлексию, чтоб это делалось само?
Александр
Александр
во-вторых, я тоже хочу рефлексию :D
Nik
Ты просто пишешь класс
Nik
Вызываешь сделать_хорошо()
Nik
И у тебя готовая бд
Nik
Как в спринге, например
Nik
Еще бы и обратное было
Nik
создание на лету классов-отображений сущностей из таблиц
Александр
всё потому что нет метаклассов
Александр
пишешь ты CREATE TABLE на sqlite, а компилятор тебе классы генерит по ней
Александр
шутка
Nik
Именно
Крылатый
всё потому что нет метаклассов
Шаблонов нехватает? ._.
Berkus
Шаблонов нехватает? ._.
неа, надо как макросы в лиспе/расте
Berkus
и препроцессор выкинуть к хуям
RattenKong 🦧🐀🦍️
и препроцессор выкинуть к хуям
тогда не будет pragma once
vladislav
там и модули подвезут, глядишь мой сынишка к окончанию универа и успеет опробовать всю мощь
ep
там и модули подвезут, глядишь мой сынишка к окончанию универа и успеет опробовать всю мощь
Метаклассы, модули... боюсь, что к тому времени не останется никого, кто будет испытывать от этого радость. Программы будет писать сильный ИИ, а люди получать безусловный доход. :)
vladislav
мб и людей уже не будет...
Крылатый
тогда не будет pragma once
Будут модули же.
ep
ой, ну так каждый раз холивар про метаклассы начинается
Выглядит слишком хорошо, чтобы стать правдой :)
Berkus
Anonymous
@square_root, почистил?
Anonymous
попросили пройти в холиварню
Aidar
В супапро
Денис
не все знают, что в с++ можно выбрать оба стула )
Денис
тем вот он и прекрасен
Berkus
на D вряд ли, уж скорее на расте
vladislav
на раст скорее
Constantine
есть кто по шаблонной магии?
Constantine
как вот это можно без макросни написать? #define UTILS_SFINAE_DECLARE_HAS_IF_INVOKABLE_1(name) \ namespace sfinae { \ template <typename T, typename = void> struct has_##name : std::false_type {}; \ template <typename T> struct has_##name<T, std::void_t<decltype(##name(std::declval<T>()))>> : std::true_type {}; \ } \
Berkus
никак
Berkus
если видишь ##name значит жди метаклассов
Constantine
имя не важно
Constantine
вся конструкция namespace sfinae { template <typename T, typename = void> struct has_is_null : std::false_type {}; template <typename T> struct has_is_null<T, std::void_t<decltype((utils::is_null)(std::declval<T>()))>> : std::true_type {}; }
Berkus
я понимаю, я про то что ты делаешь has_##whatever и это умеет только препроцессор
Constantine
забей на это, нужно просто одним оператором написать
Aidar
Никак
Constantine
вот эту штуку переиспользовать не получается namespace impl_ { template <typename, typename... TArguments> struct is_invokable_helper : std::false_type { }; template <typename... TArguments> struct is_invokable_helper<std::void_t<decltype(std::invoke(std::declval<TArguments>()...))>, TArguments...> : std::true_type { }; } template <typename... TArguments> using is_invokable = impl_::is_invokable_helper<TArguments...>;
Aidar
Можно только отдельно для каждого whatever
Constantine
мало ли, может я просто тупой)
Constantine
namespace sfinae { namespace impl_ { template <template<typename...> typename TTemplate, typename, typename... TArguments> struct can_be_instanced_helper : std::false_type { }; template <template<typename...> typename TTemplate, typename... TArguments> struct can_be_instanced_helper<TTemplate, std::void_t<TTemplate<TArguments...>>, TArguments...> : std::true_type { }; } template <template<typename...> typename TTemplate, typename... TArguments> using can_be_instanced = impl_::can_be_instanced_helper<TTemplate, void, TArguments...>; }
Constantine
вот это получается, опять же здесь не получается применить
Александр
Где-то я уже это видел..
Александр
is_detected
Constantine
См detection idiom http://en.cppreference.com/w/cpp/experimental/is_detected
Такое ощущение, будто я это и написал между делом)
Constantine
См detection idiom http://en.cppreference.com/w/cpp/experimental/is_detected
Собственно, у меня не получается единственным случай, когда у меня перегруженная шаблонная фукнция в духе template <typename TType> inline bool is_null(std::unique_ptr<TType> const& value); template <typename TType> inline bool is_null(std::shared_ptr<TType> const& value); template <typename TType> inline bool is_null(TType const* value);
Constantine
мне приходится трейты руками писать
Constantine
ааааа! namespace sfinae { template <typename T> using is_null_type = decltype((utils::is_null)(std::declval<T const&>())); template <typename T> using has_is_null = can_be_instanced<is_null_type, T>; }
Constantine
Nik
Надеюсь мне такое никогда не придется писать...
Constantine
Не знаю, мне нравится
Constantine
Возможно дело в том, что я учил С++ по книжке Александреску :)
Aidar
Но Александреску же упоротый гений
Ivan
Ребята, если ищем разработчика, куда можно эту информацию забросить? Исходя из правил группы не очень понял. Кто подскажет?
Aidar
@AlexFails
Aidar
В лс
Anonymous
Heyy
Constantine
Еще один вопрос. Уже есть proposal на то, чтобы std::vector и остальные контейнеры выставляли enable_if на операторы ==, <, ...?
Aidar
Уже было в этом чате
Vitaliy
См detection idiom http://en.cppreference.com/w/cpp/experimental/is_detected
Антон, ты представляешь российскую группу по стандартизации C++ ?
Constantine
И в продолжение: есть ли какие-нибудь принципиальные концепции, позволяющие избежать срезки в operator == ?
Aidar
Я уже говорил
Constantine
Какие?
Aidar
Если они принципиально разные я против этого говна вот что я говорил
Constantine
struct A { bool operator == (A const& other) { return true; } } struct B : A {} void f() { B b1, b2; b1 == b2; }