15

結果の型が文字列入力の値に依存するように、ユーザー定義の文字列リテラル変換演算子を定義することは可能ですか?

ユーザー定義の整数リテラルと浮動小数点リテラルは、リテラル演算子テンプレートを受け入れ、リテラルの実際の文字がテンプレート引数として渡されるため、簡単です。例:

template <char... s> struct silly { using type = int; };
template <char... s> struct silly<'1', s...> { using type = double; };

template <char... s>
typename silly<s...>::type operator"" _silly() { return 0; }

static_assert(std::is_same<int, decltype(4321_silly)>::value, "no luck");
static_assert(std::is_same<double, decltype(1234_silly)>::value, "no luck");

ユーザー定義の文字列リテラルにはそのようなものは存在しないようです。

現在の標準で、または将来の改訂で計画/議論されている、おそらくこれを行う別の方法はありますか?

4

1 に答える 1

1

いいえ、深刻なマクロハッカー以外では不可能です。文字列リテラルは 経由でアクセスされconstexpr、 の戻り値の型constexprは引数の値に依存できません。

文字列リテラルの提案<char...> operator""は、「未加工または処理済み」の問題とそれを指定する方法に関する問題に遭遇し、次の標準に間に合うようにこれらの問題をハッシュ化するのが難しいか、ROI が低いため、どこで削除されましたか。(少なくとも、何が起こったのかを何気なく読んだことから)。

それがつるで死んだのか、それともまだ作業中なのかはわかりません。

ハッカーは疑似手動で渡す<arr[0], arr[1], arr[2]>ことtemplateであり、ユーザー定義のリテラル構文を (直接) 関与させることはありません。それには多くの問題があります。

于 2014-07-26T14:13:39.970 に答える