Andrei
Согласись, что то, как это делается в плюсах, через магические шаблоны, которые 95% не понимает — это неправильно.
Nikita
Так-то да, костыльно, хотелось бы нативной рефлексии
Andrei
Нет ничего такого, что поражало бы воображение своей новизной, в том чтобы уметь по-человечески работать с типами, в том числе с агрегатными.
Andrei
То, что шаблоны дают такую функциональность — это случайка, а не by design.
Golodnyi
Посоны, такая проблема, у меня есть 2 параметра 1) Указывает кол-во байт 2) Указывает знаковый или беззнаковый инт могу ли я как то динамически выделять память под int32, int16, int8, uint32, uint16, uint8 ?
Berkus
+
Golodnyi
что за шаблоны?
Denis
void* mem = malloc( sizeof( int ) );
Berkus
void* mem = malloc( sizeof( int ) );
это не с++ если что
Berkus
ну int тип универсальный...
Denis
Вместо int подставлять конкретный инт, домножить на количество
Denis
Обернуть в юник
Denis
Это ж детали уже
Denis
auto a = std::make_unique<int_t[]>( size );
Berkus
auto a = std::make_unique<int_t[]>( size );
окей, как этим способом аллоцировать int16_t?
Berkus
придется на 0.5 домножать
Denis
auto a = std::make_unique<int16_t[]>( size );
Berkus
нде
Александр
придется на 0.5 домножать
auto a = std::make_unique<int_t[]>(0.5);
Berkus
auto a = std::make_unique<int16_t[]>( size );
теперь прочитай задание - тебе передают КОЛИЧЕСТВО БАЙТ
Denis
И не передаётся тип шаблоном?
Berkus
я понимаю что это обычная инженерная практика - прочитать ТЗ, додумать и сделать херню
Denis
)0))
Denis
Ладно, наверное я понял где я ошибся
Denis
Надо угадать, какой тип, когда передали количество байт?
Berkus
но по хорошему у тебя интерфейс такой <int Bytes, bool Signed>
Berkus
Надо угадать, какой тип, когда передали количество байт?
да, и я думаю что шаблонная специализация тут подойдет в принципе
Denis
Дак если Bytes = 4
Denis
То как можно угадать, что выделять?
Berkus
Дак если Bytes = 4
это int32_t/uint32_t ага, изич
Denis
Дак это один int32 или два int16
Denis
Или инт всегда один?
Berkus
Или инт всегда один?
ну надо было читать задание-то
Berkus
Посоны, такая проблема, у меня есть 2 параметра 1) Указывает кол-во байт 2) Указывает знаковый или беззнаковый инт могу ли я как то динамически выделять память под int32, int16, int8, uint32, uint16, uint8 ?
Berkus
ничего про массив интов там не было
Berkus
implied
Александр
Ну вот выделит он динамически память, а дальше что с типом делать?
Berkus
эй, испортил шутку!
Александр
эй, испортил шутку!
Я уже забыл, что я поправил в сообщении (
Berkus
напиши один, в нем создай все примеры
Berkus
add_executable(example1 example1.cpp) add_test(example1) add_executable(example2 example2.cpp) add_test(example2) add_executable(example3 example3.cpp) add_test(example3) потом ctest . запустит все примеры сразу
Nikita
void* mem = malloc( sizeof( int ) );
ееее, лезем в кучу ради одного инта
Denis
ееее, лезем в кучу ради одного инта
Я думал там не один инт, а N ( ._.)
Berkus
ееее, лезем в кучу ради одного инта
как будто это что-то плохое
Evgenii
Google представил открытую библиотеку Abseil для разработчиков на C++ http://www.opennet.ru/opennews/art.shtml?num=47275 Компания Google представила проект Abseil, в рамках которого открыта коллекция полезного кода для разработчиков на языке C++, расширяющего стандартную библиотеку функций. Исходные тексты распространяются под лицензией Apache 2.0. #opennet
Anatoly
спасибо, вторым будешь
🐙 Antony
За взрыв мозгов можно давать практически за любое метапрограммирование. От magic_get до hana и loophole
Мы с автором loophole скооперировались и внесли его идеи в magic_get https://github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/core14_loophole.hpp Так что уже в С++14 рефлексия практически полноценная
🐙 Antony
там же число полей брутфорсится
Не брутфорсится, и ищется за log( sizeof(T) )
Крылатый
Заюзать, что ли, magic_get для ОРМ...
Крылатый
Го пилить? У меня и название есть — ormageddon.
Крылатый
Единственное, что меня расстраивает — это отсутствие компил-тайм строк.
🐙 Antony
А списочек изменений или нововведений есть где-то?
Изменения: были убраны ограничения C++14 Можно выцепить из вот этого комита: https://github.com/apolukhin/magic_get/commit/b67893d92e22f486b106128f0e2682d058ed36d7#diff-fc3060c4f87c9202c444272ee5ff027a
Александр
Кстати, кто-то говорил про то, что не хочет, например, сериализовать всю структуру, а лишь некоторые поля. Так это решается запиливанием оберток Serializable<T>, а далее magic_get + hana -> фильтруем нужные типы
🐙 Antony
ага
Александр
@antoshkka Нет возможности проверить: magic_get требует gcc-5.0, а вот с 4.9 никак не прокатит?
🐙 Antony
Боюсь что в данный момент - никак. Нужна поддержка constexpr из C++14 Pull Request переписывающие все constexpr функции в однострочники без циклов и использования if - приветствуются :) НО последующее лечение и реабилитация не оплачиваются!
Andrei
Вот прикроет комитет эти извращения с френдами, что делать будете? :/
🐙 Antony
Вот прикроет комитет эти извращения с френдами, что делать будете? :/
В С++17 они не нужны для рефлексии В C++14 по прежнему остаётся старый подход (без friend), в доке показано как его включать
Golodnyi
забудь [edited]
Andrei
А что будет в 17 такого? Рефлексия? Человеческая работа с типами?
Andrei
А люди уже контейнеры для типов пишут.
Anonymous
А что будет в 17 такого? Рефлексия? Человеческая работа с типами?
А что значит "будет"? С++17 давно уже вышел
Andrei
Неправильно выразился, спасибо.
🐙 Antony
Послушай Саттера на CppCon2017, тебе понравится ;)
Andrei
Я имел в виду, что позволяет в 17-м стандарте получать такую же функциональность.
🐙 Antony
Я имел в виду, что позволяет в 17-м стандарте получать такую же функциональность.
structured bindings позволяют "разлагать" тип на состявляющие, если знать количество составляющих. Все запоминания типа через implicit tempalte conversion operator становятся не нужны
Evgenii
c++14 для бедных
с++17 для чотких пацанов?
Berkus
с++17 для чотких пацанов?
для тех кто бежит впереди паровоза
Evgenii
для тех кто бежит впереди паровоза
ну вперед такого паровоза несложно убежать
ttldtor
с++17 для чотких пацанов?
я про эту либу. Она позволяет использовать некоторые фишки c++14 стандартной либки теми у кого компилятор умеет только c++11
ttldtor
c++17 можно уже использовать без боли. Если мириться с кривой реализацией, которую никто не будет исправлять
ttldtor
Ну и при отсутствии поддержки от всех IDE