【问题标题】:How to use a shorter name for `setw`, `setprecision`, `left`, `right`, `fixed` and `scentific`?如何为“setw”、“setprecision”、“left”、“right”、“fixed”和“scientific”使用更短的名称?
【发布时间】:2021-08-16 13:30:24
【问题描述】:

我想在我的代码中使用这些 STL 函数,但是它们的存在多次使代码的可读性变得很麻烦。有没有办法为这些命令定义“别名”?

【问题讨论】:

  • 其中一些名称有 4 个字符长,怎么会有人知道 std::cout << w(10) << p(4) << l 是什么意思?
  • 可读性是非常主观的。我建议你把它排除在问题之外。我同意 Caleth 的观点,即引入更短的名称或通常引入读者不常见的别名(虽然读者确实知道 setwsetprecision 等)会导致代码不可读而不是可读。然而,问题归结为“如何获得 iomanipulators 的别名?”我们不需要输入基于意见的可读性来回答这个问题。
  • 您的意图的问题是最终结果将是只有您可以阅读的代码。这仅在您需要其他人的代码帮助时才有效。他们将无法阅读并帮助您。将别名定义放在文件顶部将无济于事。视觉识别对于快速分析一段代码至关重要。经验丰富的开发人员天生就能够识别标准库名称,如果他们只看到 ws 自己坐在那里,将无法为您提供太多帮助。
  • 如果您需要进行大量格式化,请考虑改用std::format。如果您不使用 C++20,请查看 std::printf 是否可以使用或查找一些格式库。

标签: c++ stl alias fixed setw


【解决方案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 &lt;&lt; confu(42) &lt;&lt; sing(3) &lt;&lt; 42; 令人惊讶:我必须寻找 confu 的定义和sing 只是意识到它们只是可以直接使用的东西的别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2019-02-08
    相关资源
    最近更新 更多