Vitaliy ◀️TriΔng3l▶️
Но не классы
Vitaliy ◀️TriΔng3l▶️
И не copy, move и вся эта хрень
Ignat
Вообще, кстати, шаблоны для функций — это было бы замечательно
там есть generic selection, для стандартных типов, наверное, хватает
Ignat
C11
Vitaliy ◀️TriΔng3l▶️
Оу
Ignat
ну это что-то очень странное
Vitaliy ◀️TriΔng3l▶️
И в MSVC их нет, я так понимаю?
Ignat
#define cbrt(X) _Generic((X), \ long double: cbrtl, \ default: cbrt, \ float: cbrtf \ )(X)
Ignat
такие вот инновации!
Ignat
про MSVC не в курсе
Ignat
зачем он, когда есть clang-cl?
Stanislav
#define cbrt(X) _Generic((X), \ long double: cbrtl, \ default: cbrt, \ float: cbrtf \ )(X)
это ж "женерики" из последнего Си
Ignat
всё так
Vitaliy ◀️TriΔng3l▶️
зачем он, когда есть clang-cl?
А он насколько хорошо с MSVCRT совместим?
Vitaliy ◀️TriΔng3l▶️
По современным фичам
Ignat
без понятия
Ignat
ну С вообще язык интересный
🦥Alex Fails
надо в C++ Добавить, кек
Рома
что лучше, sdl или allegro?
🦥Alex Fails
SFML
Рома
SFML
ну хз, там даже только недавно добавили возможность с буффером работать
Рома
и то только если с сорков компилить
🦥Alex Fails
а тебе что вообще нужно от библиотек такого вида: просто форточка опенгла (тип как в глуте/глфв) или еще набор кучи всего, до чего дотянулись создатели?
Рома
ну все 3 этих либы, тоже набор разный реализуют
Anatoly
понять не могу, а boost::hash для boost::any должен быть определен?
Рома
в чем тогда преймущество sfml от других? функционала как я понял меньше
Рома
+ что меньше памяти жрет, если проект большой
Alexander "SonnySlave"
Alexander "SonnySlave"
пихаешь any в хеш таблицу?
Anatoly
а что такое? что-то не работает?
boost::any a{10}; boost::hash<boost::any>()(a); не компилируется
Alexander "SonnySlave"
хм, пишут, что должно пахать
Anatoly
хм, пишут, что должно пахать
#include <boost/any.hpp> #include <boost/functional/hash.hpp> достаточно?
Alexander "SonnySlave"
да вроде как должно хватать...
Alexander "SonnySlave"
сейчас сам потыкаю
Anatoly
возможно проблема в msvc 2017: F:\Tools\vcpkg\installed\x64-windows\include\boost\functional\hash\extensions.hpp:262: error: C2664: 'size_t boost::hash_value(std::type_index)': cannot convert argument 1 from 'const boost::any' to 'std::type_index' [F:\Work\tolik.git\build-relation-algebra-Desktop_Qt_5_10_0_MSVC2017_64bit-Debug\ra.vcxproj]
Anatoly
еще одна заморочка с msvc 2017: struct foo { foo() = default; // foo(foo const&) = default; foo(foo &&) = default; template<typename T> explicit foo(T&&) {} // (1) }; ... foo f1{10}; // (1) foo f2{foo{10}}; // (1) foo f3{f2}; // (1) по стандарту он должен вызвать для f2 foo(foo &&), а для f3 foo(foo const&), а вызывает во всех трех случаях (1)
🦥Alex Fails
надо б им зарепортить
Anton
Для f2, конечно, не правильно
Yegor
А как в терминалах интерфейсы мутят. То есть только определённые части текста например делают определенным цветом
Oleg
Под виндой вроде были системные вызовы для этого, остальные просто поддерживают VT100 и его управляющие последовательности. Какой-нибудь printf("\e[31mRED\e[0m\n"); выведет красненьким, и вот эти \e[31m — и есть escape-последовательности для работы с текстом.
Anatoly
Почему для f3 foo(foo const&)? Тип шаблона выведется как foo&, а он лучше (нет qualification conversion). См. http://eel.is/c++draft/over.ics.rank#3.2.6
потому что конструктор копий, если он присутствует, должен быть вызван в случае для f3 по определению копирующего конструктора: 12.8.1 Copy/move constructors [class.copy.ctor] 1 A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6). Пока вышел из положения: template <typename T, typename = std::enable_if_t<!std::is_same<foo, std::remove_reference<T>::type>::value>> explicit foo(T&& data) {...}
Oleg
Расскажите лучше, как мне быть, если я хочу из static-метода вызвать make_shared, а конструктор у меня приватный. Интернет для такого предлагает или делать паблик Морозов-подкласс с публичным конструктором (и, видимо, делать его friend'ом) или переопределять у make_shared аллокатор и делать friend'ом этот аллокатор.
Kirill
Если нет вероятности что конструктор кинет ексепшн то и хер с ним с мейк шаредом. нью наше все
Kirill
А если так хочется и страшно что кинет ексепшн, прям внутри класса сделать свой статический мейк шаред
Kirill
Вай? Он видит нецмспейс и приватный конструктор
Kirill
Если он внутри, вопрос в том что это такое же решение, только без того чтобы плодить левую сущность и делать ее френдом
Александр
https://godbolt.org/g/GdnYiW
Александр
make_shared вызывает new из своих потрохов
Александр
поэтому куда ты ни суть std::make_shared, приватное останется приватным
RattenKong 🦧🐀🦍️
Он предлагает new, а потом указатель в ктор шейрда пихнуть
Kirill
Я сказал написать свой make shared
Kirill
только не френдом его делать а внутри. Делать френдом это сродни у синглтона метод get делать отдельным классом и френдом, можно но нахрена сущности плодить
Kirill
В вообще да. Если нет вероятности ексепшена в конструкторе, а ее скорее всего нет, то New и в шаред как я и предложил первым делом
Anton
все же главная фишка make_shared в том, что new зовется один раз, а не два... ну и exception safe
Oleg
все же главная фишка make_shared в том, что new зовется один раз, а не два... ну и exception safe
И в памяти хранит на один указатель меньше, это не хочется потерять. Так бы, конечно, написал shared_ptr<…>(new …) и не парился.
Arseny
А. Еще можно сделать конструктор публичный, но принимающий приватный тег.
Александр
А ещё на SO хитрый выход с созданием класса пустышки class Dummy : A, а у A делаем закрытый конструктор. Также пробрасываем конструктор и создаём просто Dummy
Arseny
Это как раз то, о чем Олег в самом начале писал.
Александр
Да, точно, не заметил
🐙 Antony
@antoshkka @zamazan4ik ребята, рассудите
Вообще-то я сам в шоке: https://godbolt.org/g/8QKGQ8
🐙 Antony
вот так даже более эпично: https://godbolt.org/g/MS41Bp В зависимости от типа скобок и версии стандарта выбираются разные перегрузки у GCC
🐙 Antony
Кажется что GCC наглючил, foo f3{f2}; должен вызывать (1), вне зависимости от стандарта
🐙 Antony
Минут через 15 заведу тикет
Anatoly
Кажется что GCC наглючил, foo f3{f2}; должен вызывать (1), вне зависимости от стандарта
почему? я ожидаю здесь вызов копирующего конструктора, а копирующий конструктор не может быть шаблонным по определению.
Mikhail
Привет всем! Не сочтите за рекламу, просто хочу спросить мнение прокачанных прогеров на плюсах. Сам уже 5 лет как в коммерческих разработках на плюсах не учавствую, только для себя в опен соурсных проектах свечусь, стараюсь от стандартов не отставать. Последнее время работаю с дот нетом, но хотелось бы в плюсы вернуться. Но понимаю, что много пропустил. Тут компания OTUS открывает набор на курсы по С++. Вроде программа не на джунов рассчитана. Вот думаю стоит на курсы эти записываться или нет. Курсы 40 тыс.р. стоят и длятся 5 месяцев. Не большие деньги, но и не малые. Может кто что слышал об OTUS? Может кто мнение свое скажет? Стоит оно того или нет, для освежения памяти?
Matwey
А давайте проведем тут голосование, кто когда-либо ходил на какие-нибудь платные курсы
Yaroslav
через @vote
Anonymous
Курсы тебе точно ничего нового не расскажут
Anonymous
Точнее, то количество нового, что ты услышишь, не будет стоить твоих денег
Mikhail
ИМХО, ты ведь практикующий программист, все что тебе требуется почитать новшества языка. едва ли тебе поможет курс.
Да, но как-то привлекает то что курс с практикой и какой-то системой оценок. Вот бывает на меня находит, пишу что-нибудь и вроде все работает и код читаемый, но всегда найдется тот кто это говнокодом обзовет. Вот и как расти, если даже не знаешь как оценить свою же работу и не знаешь на кого ровняться?)))