現時点で私が知る限りtypedef
、 C++11を実行することはできませんenum class
。enum
カプセル化クラスの外で変数を参照するときに、変数の名前の長さを減らすことができる他の方法があるかどうかを知りたいです。次に例を示します。
// I would like to do something along the lines of:
class SegmentActivityState;
using SegmentActivityType = SegmentActivityState::ActivityStateType;
// ...However, this results in the compile time error:
// 'SegmentActivityState' does not name a type.
// Enumeration class definition
class SegmentActivityState
{
public:
enum class ActivityStateType : Index
{
PreExecution = 0, /**< Pre-execution state. */
Execution = 1, /**< Execution state. */
PostExecution = 2 /**< Post-execution state. */
};
private:
ActivityStateType ActivityState;
/**< unique object identifier tag. */
public:
// ... Methods that work on the ActivityState
}
最も重要な問題は、 のenum
外側を参照する必要がある名前の長さですSegmentActivityType
。たとえば、型の比較を行うには、 を記述する必要がありますがSegmentActivity.getState() == SegmentActivityState::ActivityStateType::PreExecution
、これは非常に冗長です。やりたくないことは次の2つです。
typedef
オンSegmentActivityState
。enum class
ActivityStateTypeoutside of the class
SegmentActivityState` 定義を移動します。