問題タブ [fmt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - fmt with Howard Hinnant's date: なぜ fmt::to_string の "{}" なのですか? fmtと日付のベストプラクティス?
TL;DR: fmtと Howard Hinnant の日付ライブラリ用のカスタム フォーマッタを実装しています。では、正常に動作しているときにreturnが返さdate::year_month_day d{};
れるのはなぜですか? ゴッドボルトの例。fmt::to_string(d)
"{}"
fmt::format("{}", d)
"0000-00-00"
日付ライブラリを使用していて、iostreams からfmtに切り替えようとしています。YYYY-MM-DD 形式でフォーマットする必要があるdate::year_month_day
ため、カスタム フォーマッタを作成しました (fmt::formatter のテンプレート特殊化date::year_month_day
):
Godboltでは、2 つの動作例と 1 つの失敗例を含む完全な最小限の動作例を利用できます。
そのカスタム フォーマッタを使用するとfmt::format("{}", date::year_month_day{})
、期待どおりに動作し、"0000-00-00"
. fmt::to_string(date::year_month_day{})
同じ結果を返すはずですが、"{}"
代わりに返されます。
を含む を使用してフォーマットdate::year_month_day
およびその他のタイプを作成する最良の方法は何ですか? なぜ私はそれを得るのですか?date
fmt
fmt::to_string()
"{}"
私はまだ C++20 の日付をサポートするコンパイラを使用できません: 私の知る限り、2020 年 6 月の時点で C++20 の std::chrono のカレンダーとタイムゾーンの部分の完全な実装はありません。
更新: カスタムの空の構造体にカスタム フォーマッタを使用しても問題なく動作し、format("{}", s)
とで同じ結果が得られto_string(s)
ます。上記の Godbolt リンクの例を参照してください。date::year_month_day
したがって、どの壊れ方について特別な何かがあるに違いありませんfmt::to_string()
。
c++ - std::format を含めることはできません
std::format がいかに役立つかを見てきました。しかし、C ++ 20に含めようとするたびに機能しません。どうやらすでにライブラリに含まれているようですが、表示されず、オンラインの情報もありません。cppreference にもその例がありますが、オンライン コンパイラでさえ実行されません。そこからスニペットを添付しました。
GitHub からライブラリを非常に複雑にインポートせずに機能させる方法を知っている人はいますか。主に VisualStudio を扱っています。