【问题标题】:Have single line empty constructors, but braces on newline everywhere else有单行空构造函数,但在其他任何地方都在换行符上大括号
【发布时间】:2026-01-03 12:55:01
【问题描述】:

我正在寻找一种方法使 clang-format 允许单行空构造函数,但在其他任何地方都将大括号放在换行符上。

理想情况下,我想通过一个 clang 配置来支持这三种情况。

Test::Test(const std::string &name) : name(name) {}

std::string Test::get_name()
{
    return name;
}

void Test::blank()
{
}

无论如何,有没有一种特殊情况构造函数的方法?即使能够像构造函数一样在一行上有空函数也是可以接受的。但是将短函数放在一行上是不可接受的。

【问题讨论】:

    标签: clang-format


    【解决方案1】:

    这并不能解决所有问题,但它解决了我的主要情况。

    AllowShortFunctionsOnASingleLine: InlineOnly
    

    这将允许类定义中的短函数为单行。

    来自https://clang.llvm.org/docs/ClangFormatStyleOptions.html

    SFS_InlineOnly(在配置中:InlineOnly)仅合并类内定义的函数。与“内联”相同,但不表示“空”:即*空函数也不合并。

    class Foo {
      void f() { foo(); }
    };
    void f() {
      foo();
    }
    void f() {
    }
    

    这与 BreakBeforeBraces 相结合:Allman 给了我想要的结果。

    【讨论】: