C++ではカンマ演算子をオーバーロードできる。前の記事では残念ながらC++に負けてしまったが、今度こそC++でスライスすべくカンマ演算子をオーバーロードしたプロキシクラスを書いてC++に打ち勝つことにする。
前に作った失敗作はこいつだ。ここにあるsliceable
君は続投してもらい、今回は整数型のプロキシクラスを作っていこうと思う。
追加するコード
整数型のプロキシクラスは何も難しいことをしない。粛々と整数値を格納し、淡々とカンマ演算子をオーバーロードするだけだ。カンマ演算子によって二つのinteger
オブジェクトはstd::pair
にまとめられる。
#include <iostream> #include <string_view> #include <algorithm> #include <type_traits> template<class T> bool concept Integral = std::is_integral_v<T>; template<Integral Int> struct integer{ using value_type = std::remove_reference_t<Int>; integer(Int i) : value {i} {} value_type value; friend std::pair<integer, integer> operator, (const integer& a, const integer& b) { return std::make_pair(a, b); } }; integer<unsigned long long> operator""_i (unsigned long long v){ return integer<unsigned long long>(v); }
sliceable君と合体
こんな感じになる。N_i
などと書かなければinteger
のカンマ演算子に解決されないのがしんどいが、まあ前よりは簡単になったと信じたい。
C++でスライスをするのはやはり他の言語よりは記述量が多くなりそうだ。