FlagGroup クラスに、引数として EnumRange クラスのオブジェクトを受け取る
コンストラクタを追加する。
これにより以下のような使い方ができる。
if (flags.has_any_of(EnumRange(TR_STR, TR_CHR))) {
// flags が TR_STR ~ TR_CHR のいずれかのフラグを持っている
}
#pragma once
+#include <iterator>
#include <type_traits>
/*!
*/
class iterator {
public:
+ // std::iterator_traits に対応するための定義
+ using difference_type = int;
+ using value_type = EnumType;
+ using pointer = const EnumType *;
+ using reference = const EnumType &;
+ using iterator_category = std::input_iterator_tag;
+
/*!
* @brief 引数で与えた列挙値を指すイテレータオブジェクトを生成する
*
#include <bitset>
#include <optional>
+template <typename T>
+class EnumRange;
+
/**
* @brief フラグ集合を扱う、FlagGroupクラス
*
/**
* @brief FlagGroupクラスのコンストラクタ
*
+ * EnumRangeクラスで指定した範囲のフラグがON、それ以外はOFFの状態の
+ * FlagGroupクラスのインスタンスを生成する
+ *
+ * @param range 範囲を示すEnumRangeクラスのオブジェクト
+ */
+ FlagGroup(const EnumRange<FlagType> &range)
+ : FlagGroup(range.begin(), range.end())
+ {
+ }
+
+ /**
+ * @brief FlagGroupクラスのコンストラクタ
+ *
* 入力イテレータで指定した範囲のリストに含まれるフラグがON、
* それ以外のフラグがOFFの状態のFlagGroupクラスのインスタンスを生成する
*