Re[14]: Cоздание базового шаблона минуя специализацию
От: Videoman Россия https://hts.tv/
Дата: 27.10.22 14:22
Оценка: 8 (1)
Здравствуйте, so5team, Вы писали:

S>Как это перенести на вот такой способ записи:

S>
S>int a = ...;
S>std::time_t b = ...;
S>print(std::cout, "Value {} at {}", a, b);
S>

S>если я хочу time_t форматировать не так, как это делает некий задействованный мной print (пусть он будет стандартным)?

S>Здесь же есть только форматная строка (которая парсится не мной) и ссылки на значения, типы которых могут вообще не иметь отношения к моей библиотеке. Что-то мне не видно где здесь вообще форматеры для print-а указать можно.


Могу рассуждать только гипотетически. Допустим мы можем добавить более низкоуровневую функцию print_as:

namespace my_namespace
{
struct my_trait{};
}

namespace std
{
std::print_as(std::cout, std::format_as<my_namespace::my_trait>(), "Value {} at {}", a, b);
}
Где-то в потрохах мы делегируем std::format_as<my_trait>() до каждого форматера, который является функцией и получает его в качестве аргумента. Тогда если отключены стандартные форматеры, ADL будет искать во всех остальных местах, в том числе в my_namespace. А std::print для удобства пусть вызывает что-то типа: std::print_as(std::cout, std::format_as<std::format_traits>, "Value {} at {}", a, b);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.