型が文字列を表すことができるかどうかをテストするために、既存の(標準ライブラリまたはBoostの)型特性がありますか?文字列の型特性
Boost.Fusionを使用したとき、私は問題につまずい:
auto number = fusion::make_vector(1, "one");
auto numberName = fusion::filter< char const * >(number);
assert(numberName == fusion::make_vector("one")); // fails
私はfilter
は「1」を維持することを望んだが、「1」は、ポインタに減衰されていないため、それが失敗した(make_vector
をすることによって、その引数を取りますしたがって、タイプはconst char (&)[4]
です)。その結果、私は私がこのような何かを書くことができるようになる形質を必要とする:
auto numberName = fusion::filter_if< is_string<mpl::_> >(number);
私はchar const *
とconst char[N]
は必ずしもnull終端文字列ではありませんが、まだできるようにするには便利だろうと認識していますそれらを一様に検出する。この形質は、おそらくstd::string
などのtrue
などを返すこともできます。
このような特性が存在するのか、それとも自分で作成する必要がありますか?
static_cast( "one")はどうでしょうか?または、配列をとり、それらをポインタにキャストする一般的なテンプレートですか? –
@KerrekSB:関数呼び出しですべての文字列リテラルをカプセル化することは実際の負担のようですが、関数テンプレートを使用して型がcharポインタに変換できるかどうかをテストできます。 –
assert()内に閉じカレンがありません。 – semisight