Здравствуйте, so5team, Вы писали:
S>Гораздо важнее другой вопрос: когда библиотека поставляется в бинарном виде, как быть тогда? На ваш же вопрос ответ прост: поддержка С++11.
Ну, крупные игроки предоставляют версии под разные платформы. Кустарные мастерские (например, Кэнон:
http://community.usa.canon.com/t5/Office-Printers/setting-up-ImageFormula-DR-C225-on-Linux/m-p/169967 ) поставляют исподники. Кстати, в данном случае налицо преимущество одного бесконечного hpp, когда тестировщики не могут сосредоточиться.
mng>>И что им делать, если их текущий сборщик не переварит всех нововведений?
S>Искать что-нибудь более подходящее для себя. Написать свое. Заплатить за адаптацию под свои условия. Переделать самостоятельно. С исходным текстом можно делать все, что угодно.
Ещё вариант: использовать в библиотечном коде старые стандарты. Пусть не модно, зато благодарность пользователей не будет знать границ.
mgu>>Да нет, к подходу -- налицо излишняя многословность.
S>Разница только в количестве строк.

Вам никогда не давали в качестве тестового задания посчитать количество слов в файле?
mgu>> Против инкрементов у вас же возражений нет?
S>Инкременты откуда взялись?
Из вашего кода. Ведь можно и без них обойтись.
S>>>К коду AlexGin сходу можно предъявлять претензии гораздо более серьезные.
mgu>>Например?
S>Да вот, первый же cpp-файл в репозитории. И сразу же:
S>S>bool SMSContentGreater(CSMSContent* pSMS1, CSMSContent* pSMS2) // Global function for std::sort
S>{
S> CTime time1, time2;
S> SYSTEMTIME st1, st2;
S> if (pSMS1->GetSMSTime().GetAsSystemTime(st1))
S> time1 = CTime(st1);
S> if (pSMS2->GetSMSTime().GetAsSystemTime(st2))
S> time2 = CTime(st2);
S> time_t t1 = time1.GetTime();
S> time_t t2 = time2.GetTime();
S> if (t1 > t2)
S> return true;
S> else
S> return false;
S>}
S>
Да уж, эндшпиль напомнил мне мои рассуждения:
https://rsdn.ru/forum/job/6268918Автор: mgu
Дата: 04.12.15
.
S>Однако, особая пикантность ситуации состоит в том, что у CTime уже есть оператор "меньше". Посему непонятно, а зачем вообще нужна еще одна трансформация из CTime в time_t. Более того, очень похоже, что GetSMSTime уже возвращает объект типа CTime, у которого затем дергается GetAsSystemTime() дабы получить SYSTEMTIME. А затем из SYSTEMTIME вновь конструируется CTime... Чой-то неведомое.
Согласен.
S>Поля m_pTXBuff и m_pRXBuff объявлены в самом классе CATCmdDevice. Следовательно, занулять их в деструкторе после освобождения памяти смысла нет.
А и правда.
S>Опять же, на счет m_pTXBuff и m_pRXBuff: почему идет ручное управление памятью? Почему нельзя было воспользоваться std::vector (рекомендуемый путь со времен C++98)? Или вообще почему не сделать m_TXBuff и m_RXBuff обычными C-шными массивами?
S>Далее:
S>long CATCmdDevice::OpenSerial(int iComChannel, int iComBaudRate)
S>{
S> if (m_pSerial)
S> delete m_pSerial;
S> m_pSerial = new CSerial();
S> if (m_pSerial != NULL)
S> { // m_pSerial->Open(1, 9600);
S> BOOL bOpen = m_pSerial->Open(iComChannel, iComBaudRate);
S> if(!bOpen)
S> {
S> g_log.SaveLogFile(PBK_ERROR, "Error during opening port: COM%u (baud rate = %u)",iComChannel,iComBaudRate);
S> return 1L; // Error occur
S> }
S> else
S> g_log.SaveLogFile(PBK_DEBUG, "Port: COM%u (baud rate = %u) - opening success!",iComChannel,iComBaudRate);
S> }
S> return 0L; // OK!
S>}
S>
S>Что за проверка m_pSerial != NULL после new? Неужели автор транслирует свой код с запретом C++ных исключений на уровне ключей компилятора? Если даже он делает именно так, то где ветка else у этого if-а? А то ведь получается, что при запрещенных исключениях у него нет обработки ошибки выделения памяти (даже если в m_pSerial окажется 0, функция OpenSerial все равно вернет 0 в качестве признака успешного завершения). Если же исключения не запрещены, то данная проверка не имеет смысла, т.к. при недостатке памяти new бросит bad_alloc.
Угу, плюс подобные проверки вызывают беременность кода (его дюже сдвигает вправо, лучше на нет и суда нет, а не оборачивать успешную ветку) и таки-да, опять return ... else.
S>И это, повторюсь, всего лишь беглый просмотр всего лишь первого файла.
S>Несомненное достоинство данного кода -- это возможность в нем разобраться. Но общее впечатление, что его писал вчерашний студент, который только-только начал изучать язык C++.
Н-да... Но бывает гораздо хуже!