Как использовать более короткое имя для `setw`, `setprecision`, `left`, `right`, `fixed` и `scentific`?

Я хотел бы использовать эти STL-функции в своем коде, но так много раз, что их присутствие делает читабельность кода громоздкой. Есть ли способ определить псевдонимы для этих команд?


person TobiR    schedule 28.05.2021    source источник
comment
некоторые из этих имен имеют длину 4 символа, как кто-то должен знать, что означает std::cout << w(10) << p(4) << l?   -  person Caleth    schedule 28.05.2021
comment
читабельность очень субъективна. Я предлагаю вам оставить это вне вопроса. Я согласен с Калетом в том, что введение еще более коротких имен или вообще введение псевдонимов, которые необычны для читателя (хотя читатель знает setw, setprecision и т. д.), делает код нечитаемым, а не читабельным. Однако вопрос сводится к тому, как получить псевдоним для iomanipulators? и нам не нужно вводить удобочитаемость, основанную на мнении, чтобы ответить на этот вопрос.   -  person 463035818_is_not_a_number    schedule 28.05.2021
comment
Проблема с вашими намерениями заключается в том, что конечным результатом будет код, который сможете прочитать только вы. Это работает только до тех пор, пока вам не понадобится помощь других с вашим кодом. И они не смогут его прочитать и помочь вам. Наличие определения псевдонима поверх файла не поможет. Визуальное распознавание имеет решающее значение для быстрого анализа раздела кода. Опытные разработчики запрограммированы на распознавание имен стандартных библиотек и не смогут вам сильно помочь, если они сами увидят только w или s.   -  person Sam Varshavchik    schedule 28.05.2021
comment
Если вам нужно много форматировать, попробуйте вместо этого использовать std::format. . Если вы не используете C++20, посмотрите, есть ли std::printf будет работать или искать какую-нибудь библиотеку форматирования.   -  person mediocrevegetable1    schedule 28.05.2021


Ответы (1)


iomanipulators - это функции, и для большинства из них вы можете легко получить указатель на функцию (на самом деле я не проверял, но, например, наличие нескольких перегрузок или шаблонов функций сделало бы это менее простым):

#include <iostream>
#include <iomanip>

int main(){
    auto confu = std::setw;
    auto sing = std::setprecision;
    std::cout << confu(42) << sing(3) << 42;
}

Не могу не упомянуть, что ваша мотивация весьма сомнительна. Программисты на C++ знают вещи из стандартной библиотеки. Они не знают ваших псевдонимов. Следовательно, для всех, кроме вас, читабельность будет снижена, а не улучшена. Если у вас сложное форматирование, вы можете обернуть печать в функцию:

 my_fancy_print(42);

Читатели кода C++ привыкли к функциям, они знают, где искать их реализацию, и my_fancy_print(42) не сбивает с толку, а std::cout << confu(42) << sing(3) << 42; вызывает удивление: мне пришлось бы поискать определение confu и sing, чтобы понять, что это просто псевдонимы. для чего-то, что можно было бы использовать напрямую.

person 463035818_is_not_a_number    schedule 28.05.2021