Здравствуйте, mgu, Вы писали:
mgu>Суть от этого не меняется: то, что узкому специалисту по С++ кажется откровением свыше, давно используется в других языках.
Суть была в том, что AlexGin показывал, что его опыт нельзя назвать устаревшим. Но делал это несколько странно, на что ему и было указано. Но тут появляетесь вы, пытаетесь доказать, что главное -- это не знание каких-то там деталей, а приобретенный годами опыт. При этом демонстрируя замечательную невежественность в вопросах, которые мы с AlexGin обсуждали.
S>>В качестве подсказки: когда речь идет о C++11, то это не версии Visual C++. Это ISO-шный стандарт C++ от 2011-го года.
mgu>Да-да-да, как и HTML5, который везде требуется, вот только ничем полностью не поддерживается, так что приходится писать с диалектными особенностями.
Ваше мнение по поводу стандарта C++ и уровня его поддержки в современных компиляторах очень ценно.
mgu>Взглянул на ваше позднее творчество, заранее извиняюсь, если проглядел что-либо выдающееся, поэтому, кстати, я и просил конкретный кусок кода. Адепты фигурных скобочек вас бы разорвали на части, объектно-ориентированность практически не задействована, меня же зацепили такие пассажи:
Могу попросить объяснить, что не понравилось в этих двух фрагментах?
В первом фрагменте прошу учесть, что demands -- это переменная типа unsigned int. Надеюсь, ваш уровень знаний C++ позволяет понять, чем грозит переход через 0 при декрементах unsigned значений?
mgu>mgu>if( demands < 3 )
mgu> demands = 1;
mgu>else
mgu> demands -= 2;
mgu>
Ну а к этому в чем претензия? Особенно с учетом того, что это часть описания класса?
mgu>mgu> unsigned int m_current_position = 0;
mgu> bool m_current_tick_processed = false;
mgu>
А вот тут я должен пояснить. Внутри while вызываются заданные пользователем callback-и. К callback-ам предъявляется требование -- они не должны выпускать наружу исключения. Но в C++ пока нет синтаксических конструкций, которые бы позволяли сделать такое ограничение более формальным (спецификатор noexcept в C++11/14 не является частью сигнатуры функции, кроме того, в обсуждавшемся выше по ветке MSVS2013 его вообще нет). Посему приходится выполнять вызов callback-а внутри try-catch, дабы при возникновении исключения прервать выполнение программы из-за нарушения контракта. Отсюда и вызов std::abort.
Почему при этом вы попытались заострить внимание на вызовах unlock и lock -- это загадка. Если поясните, будет интересно.
mgu>mgu> lock.unlock();
mgu> while( head )
mgu> {
mgu> try
mgu> {
mgu> ...
mgu> }
mgu> ...
mgu> catch( ... )
mgu> {
mgu> ...
mgu> std::abort();
mgu> }
mgu> head = head->m_next;
mgu> }
mgu> lock.lock();
mgu>
mgu>Иначе в файле all.hpp (3000+ строк) вы бы не попадали по ползунку полосы прокрутки
В vim-е нет полосы прокрутки. Кроме того, вы наверняка не видели sqlite.c и не слышали про такую технику, как amalgamation.