ユーザー定義リテラルに負数を渡す方法は存在しない。
void operator "" _x(unsigned long long value) { } // call operator "" _x(100) ; 100_x ; // call operator "" _x(100) ; // then apply unary - operator to the result. // since return type of operator "" _x is void // it's ill-formed. -100_x ;
なぜなら、+-という符号は、整数リテラルではなく、単項演算子だからだ。これは、浮動小数点数リテラルでも同じである。
では、どうしても負数を表現したい場合、どうすればいいか。文字列で渡すしかない。文字列ならば、いくらでも自分の好きな負数の表現方法を定義できる。
qi::repeat - Faith and Brave - C++で遊ぼうをみて、ユーザー定義リテラルを使えば、少しコードが読みやすくなるのではないかと思った。ただ、ユーザー定義リテラルは制限も厳しすぎるので、あまりたいしたことはできない。
例えば、n回リピートするというnという引数と、何をリピートするのかという引数を、同時に渡すことができない。もちろん、ユーザー定義文字列リテラルならば、どうとでも好きになるが、二つの引数を渡すのに文字列はそぐわない。
それに、ユーザー定義リテラルのは、コンパイル時に引数が決定していなければならないので、やはり、よほど限定的な上京でしか使えない。
たとえば、nはコンパイル時に決まるとして、operator "" _repeat_1から、operator "" _repeat_10あたりまでを定義して、別の関数によりnを表現して、引数として文字を取るなどすれば、コンパイル時にnと文字を決められる環境では、すこし便利になるかもしれない。
No comments:
Post a Comment