Концепция C++ – разрешить любой тип std::format()?C++

Программы на C++. Форум разработчиков
Anonymous
 Концепция C++ – разрешить любой тип std::format()?

Сообщение Anonymous »

У меня есть код, который позволяет вам создать функцию std::string format() для любого класса и разрешить использование этого класса в вызовах std::format(). Для этого я говорю, что требуется метод, который возвращает std::string - могу ли я как-то изменить это, чтобы сказать, что формат может возвращать «любой тип, который является std::format()» able"?
Изменить: я узнал о std::formattable, но единственные примеры, которые я могу найти, - это то, как убедиться, что шаблонный тип T сам форматируемый - я до сих пор не понимаю, как указать тип возвращаемого значения одной из функций T.
Изменить: предлагаемое использование std::formatter дает:
test.cpp:10:26: error: wrong number of template arguments (1, should be 2)
10 | { v.format() } -> std::formattable;
| ^~~~~~~~~~~
In file included from test.cpp:5:
/usr/include/c++/14/format:2547:13: note: provided for ‘template concept std::formattable’
2547 | concept formattable
| ^~~~~~~~~~~

Пример кода:
#include
#include

template
requires requires (T v) {
{ v.format() } -> std::convertible_to;
}
struct std::formatter : formatter
{
auto format(T t, format_context& ctx) const
{
return formatter::format(t.format(), ctx);
}
};

struct MyStruct
{
std::string format() const { return "I'm a struct"; }
};

int main()
{
MyStruct my_struct;

std::cout

Подробнее здесь: https://stackoverflow.com/questions/790 ... -able-type

Вернуться в «C++»