1

現時点で私が知る限りtypedef、 C++11を実行することはできませんenum classenumカプセル化クラスの外で変数を参照するときに、変数の名前の長さを減らすことができる他の方法があるかどうかを知りたいです。次に例を示します。

// 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つです。

  1. typedefオンSegmentActivityState
  2. enum classActivityStateType outside of the classSegmentActivityState` 定義を移動します。
4

1 に答える 1

2

あなたの問題は、それが列挙型であることとは何の関係もありません。未定義のクラスのメンバーにアクセスしようとしているため、実行できません。これは、メンバーが何であっても機能しません。

クラス定義の後に typedef を配置すると、これで問題ありません

于 2015-04-26T10:19:54.957 に答える