据我所知,目前无法对C ++ 11 typedef
进行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
,这非常详细。我不想做的两件事是:
typedef
SegmentActivityState
。
enum class
ActivityStateType outside of the class
SegmentActivityState`定义。答案 0 :(得分:2)
你的问题与它是一个枚举无关。你不能这样做是因为你试图访问未定义类的成员。无论会员是什么,这都将永远不会奏效。
将typedef放在类定义和will be completely fine之后。