Quiero usar std::format pero Visual Studio dice que el espacio de nombres std no tiene miembro format.

Parece que esto es nuevo para C ++ 20. ¿Hay alguna manera de que esté disponible?

0
Jonathan Wood 2 may. 2020 a las 17:51

2 respuestas

La mejor respuesta

Al momento de la escritura, ninguna biblioteca estándar de C ++ implementa std::format.

Hay varias implementaciones disponibles en la web, como https://github.com/fmtlib/fmt ( presumiblemente la fuente original de la propuesta, en fmt::) y https://github.com/ mknejp / std-format (que pone todo en std::experimental::).

No recomendaría incluirlos en std. Si tuviera que lidiar con algo como esto, la solución que buscaría sería:

  • Agregue un #define <some-unique-name>_format <wherever>::format y luego use <some-unique-name>_format.

  • Luego, una vez que obtenga el soporte std::format, busque y reemplace <some-unique-name>_format con std::format y arroje el #define.

Utiliza macros, pero a la larga es mejor que tener format no calificado en todas partes.

4
S.S. Anne 2 may. 2020 a las 16:44

Puede usar fmt como una especie de polyfill. No es idéntico pero tiene una superposición significativa de características. Entonces, si tiene cuidado con la forma en que lo usa, puede cambiarlo por <format> una vez que haya soporte disponible.

#include <string>
#include <version>
#ifndef __cpp_lib_format
#include <fmt/core.h>
using fmt::format;
#else
#include <format>
using std::format;
#endif

int main()
{
    std::string a = format("test {}",43);
    return 0;
}
2
PeterT 2 may. 2020 a las 15:47