ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Добавить в стандарт специализацию std::formatter для thread_id

Open kelbon opened this issue 3 years ago • 1 comments

Очевидно, что всё что умеет выводиться в потоки (имеет оператор << для стримов) должно уметь выводиться и в std::format, но на данный момент вот этот код, который по сути делает одно и то же, не компилируется.(формат не умеет работать с этим типом)

  std::cout << std::this_thread::get_id();
  std::cout << std::format("{}", std::this_thread::get_id());

В предложениях в С++23 не увидел этого

kelbon avatar Jan 21 '22 18:01 kelbon

я бы вообще бы прошелся по всем типам в std для которых объявлен operator<< и сделать пропозал для добавления форматтеров, мне вот не хватает filesystem::path. Если с filesystem::path все просто. То с thread::id не очень, т.к. из public методов у него только конструктор.

Но я даже не знаю как тут быть, только действительно пропозал делать :)

Т.е. например для MSVC STL это бы выглядело так

class thread::id { // thread id
public:
    id() noexcept : _Id(0) {} // id for no thread

private:
    id(_Thrd_id_t _Other_id) : _Id(_Other_id) {}

    _Thrd_id_t _Id;
    
    // пропустим не нужное

    template <class _Ch, class _Tr>
    friend basic_ostream<_Ch, _Tr>& operator<<(basic_ostream<_Ch, _Tr>& _Str, thread::id _Id);
    friend hash<thread::id>;
    friend formatter<thread::id>; // added
};

template <>
struct formatter<thread::id> : public formatter<_Thrd_id_t> { //  _Thrd_id_t alias на unsigned int
    template <typename FormatContext>
    auto format(const  thread::id& id, FormatContext& ctx) {
        return std::formatter<_Thrd_id_t>::format(id._Id, ctx);
    }
};

Но тут возникает вторая проблема, нам для этого придется подключать format внутри thread, да и внутри любого друго хедера. Как это сейчас сделано в chrono. В MSVC STL заведен issue на избавление от такого подключения, но пока без движения.

crackedmind avatar Feb 10 '22 16:02 crackedmind

https://isocpp.org/files/papers/P2693R0.pdf

crackedmind avatar Nov 20 '22 00:11 crackedmind

Поправили в https://wg21.link/P2693

apolukhin avatar Feb 23 '23 10:02 apolukhin