0

これが私がこれまでに持っているものです:

    typedef const float Chord[6];

    static Chord progressionOne[] = {
        {5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5},         // i
        {5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0}, // VI
        {0.75, 1.0, 1.25, 1.5, 2.0, 2.5},                       // III
        {1.125, 1.5, 1.875, 2.25, 3.0, 3.75}                      // VII
    };

    static Chord progressionTwo[] = {
        progressionOne + 1, //VI
        progressionOne + 3, //VII
        progressionOne + 0, // i
        progressionOne + 0,
    };

これは、表記をマッサージし、アスタリスクを入れ替えて、typedefを調整する数ラウンドで取得できる最も近いもののようです。私が欲しいのは、文脈上明確であるといいのですが、progressionTwoの行を再配置して、を生成することprogressionTwoです。データの重複や毛むくじゃらの表記は気にしません。実際の値を2回入力しないように、十分に乾かしたいと思います。

...私は本当に標準を読むことに取り掛かる必要があります:/

4

1 に答える 1

1

これらを本当に単純な配列にしたい場合は#define、コードのマクロ(プリプロセッサ定義)を作成し、プログレッションにそれらのコードを参照させることができます。

typedef const float Chord[6];

#define CHORD_I { 5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5 }
#define CHORD_VI { 5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0 }
#define CHORD_III { 0.75, 1.0, 1.25, 1.5, 2.0, 2.5 }
#define CHORD_VII { 1.125, 1.5, 1.875, 2.25, 3.0, 3.75 }

const Chord progressionOne[] = {
    CHORD_I,
    CHORD_VI,
    CHORD_III,
    CHORD_VII,
};

const Chord progressionTwo[] = {
    CHORD_VI,
    CHORD_VII,
    CHORD_I,
    CHORD_I,
};

ただし、プリプロセッサの定義は面倒です。

Chord本格的なクラスに変えると、同じ方法でローカル変数または静的変数として定義できますが、型の安全性と柔軟性が向上します。次に、必要な方法progressionOneを定義progressionTwoしながら参照できます(少なくとも、ローカルでは可能です。グローバルでは、「静的順序初期化の大失敗」に遭遇する可能性があります) 。

于 2011-07-19T03:06:27.300 に答える