2015-04-26 4 views
1

Насколько я знаю, в настоящий момент невозможно сделать typedef C++ 11 enum class. Я хотел бы знать, есть ли другой способ уменьшить длину имени переменной enum при обращении к ней за пределами класса инкапсуляции. Вот пример:C++ typedef/type substitution для класса перечисления

// 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, что очень много. Две вещи, которые я предпочел бы не делать это:

  1. typedef на SegmentActivityState.
  2. Переместить enum class ActivityStateType outside of the class Определение сегментацииActivityState`.
+3

Когда вы пытаетесь создать псевдоним типа, символ 'SegmentActivityState :: ActivityStateType' еще не существует. Вы можете просто перенести его после определения класса. –

ответ

2

Ваша проблема не имеет ничего общего с переходом. Вы не можете этого сделать, потому что пытаетесь получить доступ к члену неопределенного класса. Это никогда не будет работать независимо от того, что это за участник.

Поместите typedef после определения класса и этого will be completely fine.

+0

Спасибо. Это была глупая ошибка с моей стороны. – user1391279