Tom
Александр
спасибо
Александр
https://github.com/fnc12/sqlite_orm
крутая тема
Александр
Александр
Александр
во-вторых, я тоже хочу рефлексию :D
Nik
Nik
Ты просто пишешь класс
Александр
Nik
Вызываешь сделать_хорошо()
Nik
И у тебя готовая бд
Nik
Как в спринге, например
Nik
Еще бы и обратное было
Nik
создание на лету классов-отображений сущностей из таблиц
Александр
всё потому что нет метаклассов
Александр
пишешь ты CREATE TABLE на sqlite, а компилятор тебе классы генерит по ней
Александр
шутка
Nik
Именно
Berkus
Berkus
Крылатый
Berkus
и препроцессор выкинуть к хуям
RattenKong 🦧🐀🦍️
vladislav
там и модули подвезут, глядишь мой сынишка к окончанию универа и успеет опробовать всю мощь
vladislav
мб и людей уже не будет...
Крылатый
Александр
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
Berkus
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
🐙 Antony
Constantine
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
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; }