Поддержка C ++ 20 в Visual Studio - PullRequest
0 голосов
/ 02 мая 2020

Я хочу использовать std::format, но Visual Studio сообщает, что пространство имен std не имеет члена format.

Похоже, это ново для C ++ 20. Есть ли способ сделать его доступным?

Ответы [ 2 ]

4 голосов
/ 02 мая 2020

На момент написания статьи ни одна стандартная библиотека C ++ не реализовывала std::format.

В Интернете доступны различные реализации, такие как https://github.com/fmtlib/fmt (предположительно, исходный источник предложение, в fmt::) и https://github.com/mknejp/std-format (которое помещает все в std::experimental::).

Я бы не рекомендовал включать их в std. Если бы мне пришлось иметь дело с чем-то вроде этого, решение, для которого я бы go нашел бы:

  • Добавьте #define <some-unique-name>_format <wherever>::format и затем используйте <some-unique-name>_format.

  • Затем, как только вы получите std::format поддержку, найдите и замените <some-unique-name>_format на std::format и бросьте #define.

Используется макросы, но в конечном итоге это лучше, чем неквалифицированный format везде.

2 голосов
/ 02 мая 2020

Вы можете использовать fmt в качестве полифилла. Он не идентичен, но имеет значительное совпадение функций. Так что, если вы осторожны в том, как вы используете его, вы можете поменять его на <format>, как только появится поддержка.

#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;
}
...