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.

Cómo cambiar el código de C++ para satisfacer a clang-tidy modernize-use-transparent-functors y lograr satisfacción.

Tenemos el siguiente código C++ utilizando el framework Catch2:

auto check2 = [](size_t exp, size_t val, auto comp) {
    REQUIRE(comp(exp, val));
};
check2(10, 20, std::equal_to<size_t>{});

y clang-tidy genera lo siguiente:

/test_lingua.cpp:1236:36: advertencia: prefiera los objetos de función transparentes 'equal_to<>' [modernize-use-transparent-functors]
check2(10, 20, std::equal_to<size_t>{});
               ^

¿Puede algún cambio razonable en el código hacer que clang-tidy esté satisfecho?

ACTUALIZACIÓN:

El código original comparaba size_t y nlohmann::json (algo como REQUIRE(comp(val, exp_dict[s]));) y el problema al usar std::equal_to<size_t>{} resultó en este error de compilación:

1>test_lingua.cpp(1224,25): error C2672: 'operator __surrogate_func': no se encontró ninguna función sobrecargada coincidente
1>test_lingua.cpp(1227): mensaje: consulte la instanciación de la plantilla de función 'void maz::tests::test_superscript_remover::<lambda_afa1c9ba8dd5ae9bea1ac934f5f796ab>::<lambda_9d6a94e643f0b9fe3677202d1edfa8f2>::operator ()<><void>>(const std::string &,size_t,std::equal_to<void>) const' en curso
1>test_lingua.cpp(1224,1): error C2893:
No se pudo especializar la plantilla de función 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const'
1>E:\VS019\VC\Tools\MSVC\14.29.30037\include\xstddef(198): mensaje: consulte la declaración de 'std::equal_to<void>::operator ()'

Para solucionar esto, también tuvo que utilizar .get<size_t>() para que el reenvío perfecto funcione.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, en lugar de usar std::equal_to<size_t>{}, podemos usar el functor transparente std::equal_to<>. Por lo tanto, el código actualizado sería:

    auto check2 = [](size_t exp, size_t val, auto comp) {
        REQUIRE(comp(exp, val));
    };
    check2(10, 20, std::equal_to<>{});
    

    Este cambio hará que clang-tidy esté satisfecho al utilizar el functor transparente recomendado.

Comments are closed.