gpt4 book ai didi

c++ - 使用 clang-format 保留用作函数中间参数的短 lambda

转载 作者:可可西里 更新时间:2023-11-01 18:38:12 26 4
gpt4 key购买 nike

我想用 clang-format 格式化代码,并保留用作中间函数参数的 lambda(原样):

void f()
{
func(0, [] {}, 0);
}

我在 clang-format 9.0(以及 11.0.0-2663a25f)中尝试的所有内容都将参数包装到下一行,即:

void f()
{
func(
0, [] {}, 0); // not-ok
}

如果没有第一个或/和最后一个参数,即使内置的 -style='WebKit' 选项也会给出所需的结果:

void f()
{
func([] {}, 0); // ok
func(0, [] {}); // ok
func([] {}); // ok
}

自 LLVM 8.0 以来,似乎发生了一些变化(损坏),因为 7.1 可以按需工作。 IE。给我和原来一样的东西:

void f()
{
func(0, [] {}, 0); // how to achieve this after clang-format?
}

最佳答案

clang-format 的最新版本(即 10)具有特定于格式化 lambda 的配置选项。具体来说,您所要求的可以通过为配置指令 AllowShortLambdasOnASingleLine 分配值 SLS_Inline 来实现。

以下是 offical documentation 中可用的其他选项:

AllowShortLambdasOnASingleLine (ShortLambdaStyle)

Dependent on the value, auto lambda { return 0; } can be put on a single line.

Possible values:

SLS_None (in configuration: None) Never merge lambdas into a single line.

SLS_Empty (in configuration: Empty) Only merge empty lambdas.

auto lambda = [](int a) {}
auto lambda2 = [](int a) {
return a;
};

SLS_Inline (in configuration: Inline) Merge lambda into a single line if argument of a function.

auto lambda = [](int a) {
return a;
};
sort(a.begin(), a.end(), ()[] { return x < y; })

SLS_All (in configuration: All) Merge all lambdas fitting on a single line.

auto lambda = [](int a) {}
auto lambda2 = [](int a) { return a; };

我没有找到在 LLVM 8 附带的 clang-format 上执行相同操作的方法。我找到的最接近的配置如下

clang-format -style={BasedOnStyle: WebKit, AllowShortFunctionsOnASingleLine: true,  AllowShortBlocksOnASingleLine: true}

无论如何它都没有达到您的全部要求,这就是它在我的 Windows 笔记本电脑上的样子:

void f() {
func([this] { return false; },
this); // ok
func(this, [this] { return false; }); // ok
func([this] { return false; }); // ok
}

关于c++ - 使用 clang-format 保留用作函数中间参数的短 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57153594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com