enum Parameters
{
MasterBypass = 0,
Gain,
Threshold,
Volume,
totalNumParam
};
MasterBypass
は0、 Gain
は1……と定義されているので、 case にその数値が設定されていると考えればいいです。
下記の資料(本)を参考にjuceでシンセサイザーのプラグインを作っています。
https://www.oufac.com/
資料のswitch文を使用している部分で詰まりましたので質問させてください。コードを添付いたします。
void JUCEJAPANDEMOAudioProcessor::setParameter(int index, float value)
{
switch (index)
{
case MasterBypass:
UserParams[MasterBypass] = value;
break;
case Gain:
UserParams[Gain] = value;
break;
case Threshold:
UserParams[Threshold] = value;
break;
case Volume:
UserParams[Volume] = value;
break;
default: return;
}
//GUI
UIUpdateFlag = true;
}
資料によると、インデックスで処理を分岐するということで、
index==0の場合、MasterBypassパラメータの値を設定、
index==1の場合、Gainパラメータの値を設定、
index==2の場合、Thresholdパラメータの値を設定、、、
と説明があります。
ですが、switch文のcaseで示す部分は基本的に数値だと認識しているため、資料に書いてあるようなMasteBypassのような定数?がcaseの値に設定されている場合hどのように解釈すれば良いか分かりません。
情報が少ない場合はわかる範囲で追加しますので、、よろしくお願いいたします。
enum Parameters
{
MasterBypass = 0,
Gain,
Threshold,
Volume,
totalNumParam
};
MasterBypass
は0、 Gain
は1……と定義されているので、 case にその数値が設定されていると考えればいいです。
@amerikantypewr1ter
Questioner補足となる情報を追加しますと、以下の記事が背景を説明してくれているので参考になるかと思います。
コンパイラによって、定数に展開されます。
と記事中にある通り、コンパイル時に定数として展開されるので、C/C++言語におけるswitch文の条件判定の値に使えます。
@amerikantypewr1ter
Questionercase
ラベルとして使えるのは結果が整数型になる定数式です。
定数式の詳しい条件は複雑なのでここでは述べませんが、要するにコンパイル時に計算してしまえる式であり、定数とみなせるような式です。 列挙定数以外でも様々なやり方が出来るようになっています。 たとえば以下のような。
#include <iostream>
int main(void) {
const int foo = 1;
switch(2) {
case foo :
std::cout << "one" << std::endl;
break;
case 1+1:
std::cout << "two" << std::endl;
break;
default:
std::cout << "a lot!" << std::endl;
}
}
定数式という言葉で調べれば色々と情報は見つかると思います。
ただ、 C と C++ で定数式が成立する条件が違うといったことや、 C++ でも規格の改定で変更されている部分があるということには留意する必要があるでしょう。