Berkus
меняй cwd явно
Nikita
1. берешь spdlog 2. никак к этому easylogging++ не относишься
Спасибо, кстати. Хорошая рекомендация
Vlad
Кто нибудь подскажет,как сделать правильную запись структуры в файл?Я пока нашел такой,но 2 минуса.Если я по второму кругу вызываю метод записи,то он перезаписывает файл и и первой записаной структуры нету.И плюс структура записывается абы как,в 2 строчки,хотелось чтобы,каждый элемент структуры новая строка.
Vlad
DataBase.write((char*)&ApInfo,sizeof( ApInfo));
Vlad
Fstream использую.
Square
если структура несложная
Vlad
Ради одной структуры вешать целый хлам?О_о
Vlad
Не вариант
Square
Не вариант
ну тады пилите свой велик
Viacheslav
Подскажите, а что происходит под капотом __gthrw_pthread_once ? Там разве не double checked locking?
Я не знаю, как это реализовано на PowerPC при использовании xLC. https://www.ibm.com/support/knowledgecenter/SSGH2K_12.1.0/com.ibm.xlc121.aix.doc/compiler_ref/opt_tls.html TLS там по дефолту выключен, а для этого случая в libstdc++ я вижу вот такое: 728 /// call_once 729 template<typename _Callable, typename... _Args> 730 void 731 call_once(once_flag& __once, _Callable&& __f, _Args&&... __args) 732 { 733 #ifdef _GLIBCXX_HAVE_TLS 734 auto __bound_functor = std::__bind_simple(std::forward<_Callable>(__f), 735 std::forward<_Args>(__args)...); 736 __once_callable = &__bound_functor; 737 __once_call = &__once_call_impl<decltype(__bound_functor)>; 738 #else 739 unique_lock<mutex> __functor_lock(__get_once_mutex()); 740 auto __callable = std::__bind_simple(std::forward<_Callable>(__f), 741 std::forward<_Args>(__args)...); 742 __once_functor = [&]() { __callable(); }; 743 __set_once_functor_lock_ptr(&__functor_lock); 744 #endif Если в их стандартной библиотеке такая же реализация, то я лучше свой велосипед сделаю, который гарантированно везде на атомиках.
Danil
Спасибо)
Viacheslav
Посоветуйте, кстати, хорошую литературу по memory order и вообще атомарным операциям.
Viacheslav
Лучше чтобы на английском была 😂
Berkus
DataBase.write((char*)&ApInfo,sizeof( ApInfo));
это не будет работать вообще никак
Vlad
А оно работает
Berkus
А оно работает
нет, тебе кажется
Viacheslav
Ага, спасибо.
Viacheslav
это не будет работать вообще никак
Ну почему. Оно запишет, что-то. А вот прочитать это обратно — интересная задача.
Anonymous
Berkus
Ну почему. Оно запишет, что-то. А вот прочитать это обратно — интересная задача.
ну про не работает я имею в виду что нельзя этим кодом ничего писать И читать обратно, потому что может получиться любая фигня в итоге, в зависимости от компилятора, флагов и фазы луны
Anonymous
protobuf какой-нибудь вжухни или сам сериализируй по одному члену.
Viacheslav
Я знаю. Он спросил, как записать. Записать так можно, и это будет дамп структуры со всеми её padding bits и прочим. Так делать не надо.
Aidar
зачем в fstreamах open и close?
Viacheslav
Можно ещё какой-нибудь https://google.github.io/flatbuffers/ взять.
Berkus
зачем в fstreamах open и close?
while (true) { fs.close(); fs.open(anotherfile); do_stuff(fs); }
Anonymous
зачем в fstreamах open и close?
Чтобы открыть файлы, если не сделал этого в конструкторе.
Berkus
ну эт же говнокод
это юзкейс когда тебе надо переоткрывать файлы
Anonymous
Anonymous
Зачем open/close, когда можно присвоить свежесозданный?
Anonymous
Там какие-то буфера аллоцироваться лишний раз будут?
Anonymous
(дисклеймер: не разбираюсь во внутренностях iostream)
Aidar
вангую что они и в open пересоздадутся
Berkus
Зачем open/close, когда можно присвоить свежесозданный?
сравни год когда появились open/close и год когда появился move ctor
Anonymous
сравни год когда появились open/close и год когда появился move ctor
Это понятно, дак давайте не создавать 7 тысяч способов сделать одно и то же, депрекейтнуть эти open/close и убрать через несколько лет?
Anonymous
Сколько там в C++ способов инициализировать переменную?
Anonymous
Я бы с радостью, но у них там манямирок, куда пускают только избранных.
Anonymous
3
A a = A(...); A a(...); A a = {...}; A a{...}; Гм...
Berkus
Я бы с радостью, но у них там манямирок, куда пускают только избранных.
пишешь Полухину он подскажет куда тебе с твоим предложением пройти и почему
Berkus
(на мой взгляд депрекейтить close очень нелогично, т.к. часто приходится закрывать файл до того как он выйдет из скоупа, например если у тебя хранится указатель, и иногда приходится открывать уже закрытый файл)
Berkus
поэтому выкидывать функционал который используется в реальных проектах заради какой-то геббельсовской "чистоты языка" глупо
🦥Alex Fails
https://youtu.be/_-3syPxgwqs?t=309
Надо его к нам в чат затащить
Aidar
тогда ты им потенциально не владеешь
Aidar
и закрывать его не должен
Anonymous
Anonymous
Тогда владеешь.
Berkus
я не могу его закрыть если мне дали ofstream const* - тогда соглашусь
Berkus
Aidar
unique_ptr<ofstream> тогда уж.
тогда просто ofstream
Berkus
вы доебались до детали которая к делу не относится
🦥Alex Fails
Например, есть такое апи: 1. Фабрика ифстрима; 2. Потребитель хуиты. Потребитель хуиты внутри себя убивает стрим. Вот вам и клозе
Berkus
ну я к тому что не всегда мувающий конструктор позволяет решить проблему - если у тебя есть какой-то context в котором лежит указатель на стрим, и есть потребители из стрима плюс какой-то обработчик который этот стрим переключает с одного файла на другой - ну не обязательно создавать новый стрим если можно его просто закрыть-открыть
🦥Alex Fails
Д
Square
@vchernyshev
Viacheslav
Спасибо!
Square
И тут ещё вроде
Square
Но я всегда смотрю Егора деревенца:)
Square
Но я всегда смотрю Егора деревенца:)
Ещё этот, но прям с самых маленьких https://youtu.be/SIZmLPtcZiE
Square
procxxpiracy
🦥Alex Fails
😂
Anonymous
procxxpiracy
Не-не, тут не дают варез скинуть.
Anonymous
Так что пока не всё так плохо.
Square
Его тоже надо к нам в чат!)
Ты чаще меня их видишь - го
Square
У меня вэки даже нету
Viacheslav
Не-не, тут не дают варез скинуть.
А книги можно? 😂 Ученье свет и так далее?