Насколько я знаю, в настоящий момент невозможно сделать 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
, что очень много. Две вещи, которые я предпочел бы не делать это:
typedef
наSegmentActivityState
.- Переместить
enum class
ActivityStateTypeoutside of the class
Определение сегментацииActivityState`.
Когда вы пытаетесь создать псевдоним типа, символ 'SegmentActivityState :: ActivityStateType' еще не существует. Вы можете просто перенести его после определения класса. –