2 つの から複合型を作成したいと思いますenum classes
。
enum class Color {RED, GREEN, BLUE};
enum class Shape {SQUARE, CIRCLE, TRIANGLE};
class Object {
Color color;
Shape shape;
public:
};
Object
STL コンテナーで使用するにstd::map<>
は、less-than 演算子をオーバーロードする必要があります。ただし、両方の列挙型クラスを 1 つの線形インデックスにフラット化するには、何らかの形で列挙型クラスの要素数 (NoE) が必要です。
friend bool operator< (const Object &lhs, const Object &rhs) {
return NoE(Shape)*lhs.color+lhs.shape < NoE(Shape)*rhs.color+rhs.shape;
}
プログラムの 2 つの場所に同じ情報 (要素の数) を適切な方法で入力せずに、これを行うにはどうすればよいでしょうか? (良い方法は no FIRST_ELEMENT, LAST_ELEMENT
、プリプロセッサ マジックなどを意味します)
質問 (列挙型の要素数) は似ていますが、対処していませんenum classes
。
この種の複合型を C++11 で実装する最良の方法を知りたいです。enum クラスの定義は十分に強力ですか、それとも次のように言う必要がありますか?
enum class Color {RED=0, GREEN=1, BLUE=2};
enum class Shape {SQUARE=0, CIRCLE=1, TRIANGLE=2};