FMT C ++ライブラリ:ユーザーがカスタムタイプのフォーマット指定子を設定できるようにします

レコ:

たとえば、カスタムタイプがあります

struct custom_type
{
    double value;
};

このタイプのカスタムFMTフォーマッターを設定したい。私は次のことを行い、うまくいきます:

namespace fmt
{
    template <>
    struct formatter<custom_type> {
        template <typename ParseContext>
        constexpr auto parse(ParseContext &ctx) {
        return ctx.begin();
    };

    template <typename FormatContext>
    auto format(const custom_type &v, FormatContext &ctx) {
        return format_to(ctx.begin(), "{}", v.value);
    }
};

しかし問題は、その出力形式がこの"{}"式を使用してテンプレートコードによって設定されることです。そして、ユーザーにフォーマット文字列を自分で定義する機会を与えたいと思います。

例えば:

custom_type v = 10.0;
std::cout << fmt::format("{}", v) << std::endl;    // 10
std::cout << fmt::format("{:+f}", v) << std::endl; // 10.000000

これどうやってするの?

現在、カスタム形式の文字列を設定すると、

 what():  unknown format specifier
vitaut:

最も簡単な解決策は、以下から継承することformatter<custom_type>ですformatter<double>

template <> struct fmt::formatter<custom_type> : formatter<double> {
  auto format(custom_type c, format_context& ctx) {
    return formatter<double>::format(c.value, ctx);
  }
};

https://godbolt.org/z/6AHCOJ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++ fmtライブラリ、フォーマット指定子のみで単一の引数をフォーマット

分類Dev

fmtライブラリを使用したポインタへのフォールバックによるフォーマットタイプ

分類Dev

C ++ fmtライブラリのインストールが機能していません

分類Dev

fmtライブラリを使用してポインタをフォーマットする方法は?

分類Dev

C#カスタムクラスを使用してWebユーザーコントロールを作成しようとしていますが、オブジェクトがオブジェクトエラーのインスタンスに設定されていません

分類Dev

printf()にそれぞれのフォーマット指定子に対して誤った引数タイプが与えられた場合、Cコンパイラはそれを暗黙的に変換しようとしますか?

分類Dev

PhoneFactor-InputOrVerifyテクニカルプロファイル(B2Cカスタムユーザーフロー)で、ユーザーがデフォルトの携帯電話番号を変更できるようにすることはできますか?

分類Dev

ネットワークインターフェイスタイプの検出に到達可能性フレームワークを使用しているときに、iOS(クロスプラットフォームC ++ライブラリソリューション)でエラーをビルドする

分類Dev

ffmpegはC ++でAV_SAMPLE_FMT_S16をAV_SAMPLE_FMT_FLTPに変換します

分類Dev

ネットワークインターフェイスがC ++を使用してプログラムでインターネットに接続されていることをどのように検出できますか?

分類Dev

GDB pythonインターフェースでwxのインポートに失敗しました、R6034:アプリケーションがCランタイムライブラリを誤ってロードしようとしました

分類Dev

CamlinternalFormatBasics.fmtでタイプエラー

分類Dev

C ++ {fmt}での些細な構造体のフォーマットの拡張計画?

分類Dev

C ++ {fmt}での些細な構造体のフォーマットの拡張計画?

分類Dev

リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

分類Dev

カスタムCライブラリのヘッダーファイルを自動的に生成します

分類Dev

C++ {fmt} format dynamically repeat argument

分類Dev

std :: unique_ptrがクラスのプライベートデストラクタにアクセスできるようにする方法、またはプライベートデストラクタを使用してC ++ファクトリクラスを実装する方法は?

分類Dev

Objective-C / XCodeで、コマンドラインツールプロジェクト内のプロトコルを定義するカスタムCocoaフレームワークを使用するにはどうすればよいですか?

分類Dev

Mac OSXのAtomテキストエディターでphp-fmtコードフォーマッターを設定する方法

分類Dev

パラメータとしてテーブルタイプをとるSQLServerのユーザー定義スカラー関数を呼び出すC#

分類Dev

C ++ 20fmtによる結果の合計サイズの制限

分類Dev

C ++でconstオブジェクトを宣言するには、ユーザー定義のデフォルトコンストラクターが必要です。可変メンバー変数がある場合は、どうしてですか?

分類Dev

{fmt}ライブラリを使用して1つの文字列に2つの浮動小数点数をフォーマットすることはできません

分類Dev

fmtライブラリを使用して浮動小数点数を10進コンマでフォーマットする方法は?

分類Dev

クロスプラットフォームのオープンソースUIに依存しないC#クラスライブラリに選択するVisual Studio 2017プロジェクトタイプとその理由は何ですか?

分類Dev

スタートアップ時にプログラムでタブバーのタイトルを5つのタブバーアイテムに設定します。そのうちの4つはナビゲーションコントローラーに埋め込まれていますが、1つは埋め込まれていません。Objective C

分類Dev

c関数を呼び出すと、「インポートfmt」、「インポートC」の順序でビルドエラーが発生します。なぜですか?

分類Dev

Azure Active Directory B2Cユーザーのカスタムユーザー属性を設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++ fmtライブラリ、フォーマット指定子のみで単一の引数をフォーマット

  2. 2

    fmtライブラリを使用したポインタへのフォールバックによるフォーマットタイプ

  3. 3

    C ++ fmtライブラリのインストールが機能していません

  4. 4

    fmtライブラリを使用してポインタをフォーマットする方法は?

  5. 5

    C#カスタムクラスを使用してWebユーザーコントロールを作成しようとしていますが、オブジェクトがオブジェクトエラーのインスタンスに設定されていません

  6. 6

    printf()にそれぞれのフォーマット指定子に対して誤った引数タイプが与えられた場合、Cコンパイラはそれを暗黙的に変換しようとしますか?

  7. 7

    PhoneFactor-InputOrVerifyテクニカルプロファイル(B2Cカスタムユーザーフロー)で、ユーザーがデフォルトの携帯電話番号を変更できるようにすることはできますか?

  8. 8

    ネットワークインターフェイスタイプの検出に到達可能性フレームワークを使用しているときに、iOS(クロスプラットフォームC ++ライブラリソリューション)でエラーをビルドする

  9. 9

    ffmpegはC ++でAV_SAMPLE_FMT_S16をAV_SAMPLE_FMT_FLTPに変換します

  10. 10

    ネットワークインターフェイスがC ++を使用してプログラムでインターネットに接続されていることをどのように検出できますか?

  11. 11

    GDB pythonインターフェースでwxのインポートに失敗しました、R6034:アプリケーションがCランタイムライブラリを誤ってロードしようとしました

  12. 12

    CamlinternalFormatBasics.fmtでタイプエラー

  13. 13

    C ++ {fmt}での些細な構造体のフォーマットの拡張計画?

  14. 14

    C ++ {fmt}での些細な構造体のフォーマットの拡張計画?

  15. 15

    リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

  16. 16

    カスタムCライブラリのヘッダーファイルを自動的に生成します

  17. 17

    C++ {fmt} format dynamically repeat argument

  18. 18

    std :: unique_ptrがクラスのプライベートデストラクタにアクセスできるようにする方法、またはプライベートデストラクタを使用してC ++ファクトリクラスを実装する方法は?

  19. 19

    Objective-C / XCodeで、コマンドラインツールプロジェクト内のプロトコルを定義するカスタムCocoaフレームワークを使用するにはどうすればよいですか?

  20. 20

    Mac OSXのAtomテキストエディターでphp-fmtコードフォーマッターを設定する方法

  21. 21

    パラメータとしてテーブルタイプをとるSQLServerのユーザー定義スカラー関数を呼び出すC#

  22. 22

    C ++ 20fmtによる結果の合計サイズの制限

  23. 23

    C ++でconstオブジェクトを宣言するには、ユーザー定義のデフォルトコンストラクターが必要です。可変メンバー変数がある場合は、どうしてですか?

  24. 24

    {fmt}ライブラリを使用して1つの文字列に2つの浮動小数点数をフォーマットすることはできません

  25. 25

    fmtライブラリを使用して浮動小数点数を10進コンマでフォーマットする方法は?

  26. 26

    クロスプラットフォームのオープンソースUIに依存しないC#クラスライブラリに選択するVisual Studio 2017プロジェクトタイプとその理由は何ですか?

  27. 27

    スタートアップ時にプログラムでタブバーのタイトルを5つのタブバーアイテムに設定します。そのうちの4つはナビゲーションコントローラーに埋め込まれていますが、1つは埋め込まれていません。Objective C

  28. 28

    c関数を呼び出すと、「インポートfmt」、「インポートC」の順序でビルドエラーが発生します。なぜですか?

  29. 29

    Azure Active Directory B2Cユーザーのカスタムユーザー属性を設定するにはどうすればよいですか?

ホットタグ

アーカイブ