C++でスライス(2回目)

C++ではカンマ演算子オーバーロードできる。前の記事では残念ながらC++に負けてしまったが、今度こそC++でスライスすべくカンマ演算子オーバーロードしたプロキシクラスを書いてC++に打ち勝つことにする。

前に作った失敗作はこいつだ。ここにあるsliceable君は続投してもらい、今回は整数型のプロキシクラスを作っていこうと思う。

ouchiminh.hatenablog.com

追加するコード

整数型のプロキシクラスは何も難しいことをしない。粛々と整数値を格納し、淡々とカンマ演算子オーバーロードするだけだ。カンマ演算子によって二つの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のカンマ演算子に解決されないのがしんどいが、まあ前よりは簡単になったと信じたい。

wandbox.org

C++でスライスをするのはやはり他の言語よりは記述量が多くなりそうだ。