Pull to refresh
6
0

Разработчик ПО

Send message

Так исторически сложилось. Такое соглашение о форматировании кода в большинстве проектов, в которых я участвовал. Похоже, Qt оказал влияние). Но всегда для удобства можно использовать псевдонимы для пространств имен.

namespace scl = ScL;

Развиваю библиотеку "умных" оберток https://habr.com/ru/post/650701/ и для меня это нововведение весьма полезно. Сейчас код представляет собой большую портянку макросов (например, здесь https://gitlab.com/ssoft-scl/module/feature/-/blob/main/src/Detail/Operator.h), от которых теперь можно легко избавиться.
Не думаю, что такой стиль будет распространён в прикладных программах, а вот инструментальные библиотеки типа std, boost и др. обязательно это будут использовать.

Если "потокобезопасность" это добавление на каждую операцию лока, то это не потокобезопасность

Средства библиотеки позволяют сделать операцию lock, как на каждую операцию отдельно, так и на любой блок кода, в зависимости от желаний разработчика. На постоянной основе сейчас можно сделать блокировку так

using Map = Wrapper< map, ThreadSafe::RecursiveMutex >;
Map map;

void foo ()
{
    // в месте, где нужен постоянный lock
    auto map_ptr = &map;
        // map_ptr - умный указатель, который выполнил lock
    if ( map_ptr->empty() )
        map_ptr->doAnything();
}

Не откладывая в долгий ящик, всё в проекте поправил. Спасибо за замечание, действительно глаз режет.

Кодстайл ужасный, читать очень тяжело.

Совершенно согласен с таким утверждением. Однако, из многочисленных вариантов возможной реализации данный вариант оказался наиболее компактным и совместимым с использованием обычных типов.
В некоторых случаях имеется возможность реализации оператора неявного преобразования обертки к базовому типу, тогда код будет иметь привычный вид.

for ( const auto & value : values )
        cout << value << endl;

Как раз над этим сейчас и работаю).

Подход strong typedef к простой декларации новых типов на основе существующих известен достаточно давно и имеет свою реализацию, например, в Boost.
Здесь показана возможность реализации такого подхода с помощью "умной" обертки на основе примера из доклада на коференции CppCon 2018.

И FileName и Url являются отдельными типами, а не синонимами. В этом весь смысл.

Information

Rating
Does not participate
Registered
Activity

Specialization

Specialist
Lead
From 5,000 €