4
テンプレートクラスを作成しましたが、私はユーザー定義リテラルを使いたいと思っていました。ユーザー定義リテラルの代替テンプレート
マイコード:
template<int base = 10>
class MyClass
{
// class code
};
// template<int base> /* Not allowed */
MyClass<17> operator "" _G(const char* param, size_t length)
{
string temp(param, length);
return MyClass<17> (temp);
}
int main()
{
MyClass<17> A = "75AD"_G;
A.print();
}
私の検索の結果として、私は、ユーザーのユーザー定義のリテラルは限られており、ほとんどのテンプレート上で、1つで使用することはできませんことを知っていました。
代替ソリューションがありますか、この場合、ユーザー定義のリテラルは不可能ですか?
注:base
は、2
~30
とすることができます。
私は大文字小文字を混ぜる以外に( '_g'対' _G')、うまくいかない理由はありません。 –
結果の型をリテラル自体に依存させたい場合は、C++ 11標準では使用できません。 gnuコンパイラを使用している場合、 'template auto operator" "_sl()'のようにリテラルを定義できるリテラルでその拡張を利用することができます。ベースをテンプレートパラメータに依存させるには、いくつかのsfinaeを使用する必要があります。 –
"75AD" _G "がリテラルを見るだけでどんなタイプであるかを知ることはできません。あなたが使用しているコンテキスト(代入演算子など)は無関係です。式はそれ自身で定義された型でなければなりません。 –