4

FastFormatライブラリは次のように機能します。

string example;
fastformat::fmt(example, "I am asking {0} question on {1}", 1, "stackoverflow");

また、「100%型安全性」も主張しています。boost::formatオーバーロードによってそれを達成するなど、他のライブラリがどのようにそれを達成するかを理解できoperator%ます。これは、私のコードでもかなり頻繁に行うことです。

しかし、代わりにコンマを使用できれば、他のプログラマーにとってはそれほど驚くことではありません。テンプレート化された演算子のオーバーロードトリックなしで型の安全性を保証する方法を知りたいのですが。


余談ですが、「テンプレート化された演算子のオーバーロードのトリック」とは何か疑問に思っている場合は、次のようになります。boost :: formatの動作(ほとんど):

struct Test
{
    template<class T>
    Test& operator%(const T& what) { cout << what << "\n" /* Example */; return *this; }
};

Test() % 5 % "abc";
4

1 に答える 1

6

fastformat::fmt() 無制限の数の引数を受け入れません。固定数の引数を取るオーバーロードがいくつかあります。たとえば、オーバーロードは次のようになります。

template <typename T0>
std::string fmt(const std::string& format_str, const T0& arg0);

template <typename T0, typename T1>
std::string fmt(const std::string& format_str, const T0& arg0, const T1& arg1);

// etc. for more numbers of arguments

を使用するfmt()と、適切な数の引数を持つ関数を選択するためにオーバーロードの解決が行われます。

サポートされている引数の数についてはドキュメントを確認する必要がありますが、無制限の数ではないことは間違いありません。

C++0x では、可変個引数テンプレートを使用して、無制限 (事実上無制限) の引数とタイプ セーフを使用できます。

于 2010-09-23T01:29:14.410 に答える