Vladislav
или какая-нибудь наркомания типа shared_ptr на самого себя
Denis
enable_shared_from_this, уиии
Constantine
enable_shared_from_this, уиии
я параметром функции всегда передаю, когда надо :)
Vladislav
Есть ли какой-нибудь менее костыльный способ инициализировать локальный static массив?
Vladislav
🦥Alex Fails
а если в { } ?
Vladislav
а если в { } ?
не хочется вручную цикл разворачивать в 33 копипастных строчки)
🦥Alex Fails
макросом вжухни
🦥Alex Fails
или маджик_гет возьми
🦥Alex Fails
хз, как он поможет, но зато магия же
Constantine
а нельзя там по-старому, булевскую переменную и иф на нее?
Constantine
да, кстати, а инициализация static-переменных гарантируется thread safe?
Vladislav
а нельзя там по-старому, булевскую переменную и иф на нее?
можно и так конечно, но тоже костыльненько
Constantine
т.е. ими не надо пользоваться? 😆
Vladislav
почему? Наоборот же)
Constantine
или их на запуске программы инициализируют?
Vladislav
одноразовый overhead - нестрашно
Constantine
подожди, он должен будет атомарную операцию чтения произвести
Constantine
перед использованием
Vladislav
там double-check же
Constantine
так он не работает на самом деле же
Vladislav
сначала проверяем неатомарно, если не повезло то перепроверяем уже атомарно
Vladislav
http://en.cppreference.com/w/cpp/language/storage_duration#Static_local_variables
Vladislav
Note: usual implementations of this feature use variants of the double-checked locking pattern, which reduces runtime overhead for already-initialized local statics to a single non-atomic boolean comparison.
Constantine
подожди, double check это вообще законно?
Vladislav
Почему нет? Если он правильно написан (и в этом я разработчикам компилятора доверяю) :)
Vladislav
главное - фенсы где надо расставить
Vladislav
http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/
Vladislav
можно еще http://en.cppreference.com/w/cpp/thread/call_once заюзать, видимо, но это еще более костыльно, на мой взгляд
Constantine
там хоть одна реализация не запрашивает синхронизацию при запросе из основного потока?
Constantine
В смысле, хотя бы одна реализация не требует нагрузки при запросе уже 100 лет созданного?
🦥Alex Fails
да, кстати, а инициализация static-переменных гарантируется thread safe?
в модели памяти цпп11 да, но в студии с ним баг
Vladislav
там хоть одна реализация не запрашивает синхронизацию при запросе из основного потока?
всем нужен std::atomic_thread_fence(std::memory_order_acquire); Но я не думаю что оно создает сколько-нибудь измеримый verhead
Constantine
всем нужен std::atomic_thread_fence(std::memory_order_acquire); Но я не думаю что оно создает сколько-нибудь измеримый verhead
ну ладно, а то я на секунду подумал, что можно просто во второй поток пихнуть SC операцию
Vladislav
я попытался замерить, но никакой разницы с глобальной инициализацией вообще не нашел
Aidar
Всегда думал что на х86 это нереально измерить
Constantine
Так и есть)
Да там наверняка в процессоре поифано :)
Igor
вот эта либа - огонь https://github.com/nlohmann/json
её минус - всё строчное строго юникодом должно быть
Igor
на винде у меня из-за этого проблемы закрались
ᅟ
Доброго времени суток, может кто знает ?... Как сделать вложенную таблицу в Qt ?
ᅟ
Например что бы в X ячейке информация была разложена на несколько ячеек
ᅟ
Вот пример
Square
Доброго времени суток, может кто знает ?... Как сделать вложенную таблицу в Qt ?
Есть чат кьютистов, там с большей вероятностью помогут :(
Square
https://t.me/qt_chat
ᅟ
Благодарю
Vladislav
её минус - всё строчное строго юникодом должно быть
Это минус json'а, а не либы - в стандарте написано что все строки - unicode
Igor
Это минус json'а, а не либы - в стандарте написано что все строки - unicode
Угу, просто до этого я успешно пользовался двумя другими либами которые не кидали на это исключения, поэтому при переходе на lohmann'а ситуация оказалась запущена
Berkus
я не знаю подробно, но там есть RPC?
Нету, это просто сериализация
Vladislav
gRPC быстрое да
А есть какие-нибудь тематические бенчмарки?
Vlad
http://szelei.me/rpc-benchmark-part1/
Vlad
например
Vladislav
http://szelei.me/rpc-benchmark-part1/
Чет грпц так себе, при том что они сравнивают с апачевским thrift'ом, а не фбшным
Vladislav
Это ПЛЮС жсона а не минус
"минус" - в контексте вопроса, так то плюс конечно
Vladislav
Зачем?) я и сам считаю что thrift лучше)
Berkus
Чет грпц так себе, при том что они сравнивают с апачевским thrift'ом, а не фбшным
Ну возможно, я сравнивал удобство использования и версионирования, к тому же против голого жсона. И там довольно сильно круче grpc
Vyacheslav
вот эта либа - огонь https://github.com/nlohmann/json
rapidjson по тестам самая годная
Vladislav
rapidjson по тестам самая годная
По скорости - да, я её и юзаю обычно. Но api там так себе
Vyacheslav
апи как раз тоже норм, на первый взгляд все разложено по полочкам
Berkus
Рапид оверинжинирнутый но там есть полезные штуки типа streaming parser
Ἰωάννης
и меня :(
Vladislav
Но как?
Constantine
О! Хочу proposal: forward class declaration with base classes specified
Constantine
И сверху forward nested class declaration
Constantine
При этом если base class не единственный, никакой класс не может incomplete type
Constantine
Как альтернатива - только последний класс в списке наследования может быть incomplete type
Constantine
Причина: в этом случае компилятор может выполнять typecast
Aidar
хмм как насчет итераторов типа меджикгет возвращающих variant?
Mikhail
народ подскажите каким путём пойти для организации потокобезопасных классов, что использовать task c++11, OpenMP, Microsoft PPL, или ещё что порыть
Surreal
Если задача легко решается тем, что есть в стандартной либе, то, естественно, лучше использовать ее. Только не используйте std::async, с остальным проблем там нет.
Mikhail
async я читал что много на неё ругаются но не копал особо бо ней, так что не предовал ей внимание