es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Salida de Clang-format con lambda como valor predeterminado de parámetro

La salida de clang-format para las declaraciones de funciones parece incorrecta cuando el valor predeterminado para un parámetro es una función lambda. Vea el siguiente ejemplo:

“`C++
void Sample(const TString& name,
const Type type,
const int color,
VetoFunction&& veto);

void Sample(const TString& name,
const Type type,
const int color,
VetoFunction&& veto = "UnNombrePredeterminadoMuyLargoSimilarALongitudDeLambda");

void Sample(
const TString& name,
const Type type,
const int color,
VetoFunction&& veto = [](const Category&) { return false; });

<pre><code><br />Mientras que en el último caso me gustaría obtener (sin salto de línea, y alineación de parámetros después del paréntesis de apertura, similar a los primeros dos casos):

“`C++
void Sample(const TString& name,
const Type type,
const int color,
VetoFunction&& veto = [](const Category&) { return false; });

¿Existen banderas específicas para ajustar y lograr la salida deseada?

Estoy utilizando “Ubuntu clang-format version 13.0.0-2”, con un archivo “.clang-format”:

BasedOnStyle: LLVM
Standard: Cpp11
ColumnLimit: 80
AlignAfterOpenBracket: Align
AllowAllParametersOfDeclarationOnNextLine: false
AllowAllArgumentsOnNextLine: false
ExperimentalAutoDetectBinPacking: false
BinPackParameters: false
BinPackArguments: false
Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, para obtener la salida deseada para el último caso, puedes agregar la bandera AllowShortLambdasOnASingleLine a tu archivo .clang-format. Esta bandera permite que las expresiones lambda cortas se mantengan en una sola línea, evitando así el problema de formato que estás experimentando con el parámetro de valor predeterminado.

    Tu archivo .clang-format actualizado debería verse así:

    BasedOnStyle: LLVM
    Standard: Cpp11
    ColumnLimit: 80
    AlignAfterOpenBracket: Align
    AllowAllParametersOfDeclarationOnNextLine: false
    AllowAllArgumentsOnNextLine: false
    AllowShortLambdasOnASingleLine: true   // nueva bandera agregada
    ExperimentalAutoDetectBinPacking: false
    BinPackParameters: false
    BinPackArguments: false
    

    Después de agregar la bandera AllowShortLambdasOnASingleLine, la salida para el último caso debería ser como se desea:

    c++
    void Sample(const TString& name,
    const Type type,
    const int color,
    VetoFunction&& veto = [](const Category&) { return false; });

Comments are closed.