MT5への願い - ページ 103

 
A100:

ME5ではコンパイル時にエラーが出ますが、私としては不当だと思います。


フェアポイント - そうします。
 

ENUM_XXXという形式の定義済みの列挙型を、現在はデフォルトで0番になっていますが、実際に1番にしたいのです。

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY,
        ORDER_TYPE_SELL, ...
};

はず

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY = 1,
        ORDER_TYPE_SELL, ...
};

理由は以下の通りです。一例です。

MqlTradeRequest request { ...
        ENUM_ORDER_TYPE     type; ...
}

コードのどこかでrequest.typeの値を解析したときに0になると、初期化されていないのか、初期化されているのかわからなくなる。

request.type = ORDER_TYPE_BUY;

これは、ENUM_ XXXという形式のRadioButtonに相当する定義済みの列挙型のほとんどで、現状を正しく処理するためには不合理なほどの複雑 さが必要です

 
残念ながら、番号付けをゼロから行う他の言語との互換性を維持するために、これは不可能です。
 
Renat: 残念ながら、ゼロから始まる番号付けを行う他の言語との互換性を維持するために、これは不可能です。

定義済みの列挙型の最初のメンバーとして、中立的な識別子を書くことを妨げるものは何ですか?例えば、こんな感じです。

enum ENUM_ORDER_TYPE 
  {
   ORDER_TYPE_undefined,
   ORDER_TYPE_BUY,
   ORDER_TYPE_SELL, 
   ...
  };

ゼロからの番号付け」も保存され、初期化されていない変数も簡単に評価できるようになる。

 
Yedelkin:

定義済みの列挙型の最初のメンバーとして、中立的な識別子を書くことを妨げるものは何ですか?例えば、こんな感じです。

また、すでにオリジナルの列挙型のセットを使っている他の人たちのことを考えると?これは、サーバー群全体が困惑した表情を浮かべたのは言うまでもない。

一般に、質問の仕方が正しくない。開発者が怠慢になって、その世界そのものを自壊させることで、他の世界に合わせることを強要してはならない。

 
Renat: また、すでにオリジナルの列挙型のセットを使っている他の人のことを考えたら?

さて、「他の人について」、もう一度考えてみましょう。名前付き定数 識別子は何のためにあるのですか?- 正しくは、これらの識別子を使用するためです。また、これらの識別子を使用するために、列挙型のメンバに どのような具体的な値が割り当てられているかを絶対に知っておく必要はない。それとも、有能なプログラマはenumメンバの デフォルト値を見つける代わりに識別子を使い、そのデフォルト値に基づいてチェックを行うことを想定しているのでしょうか?

レナート :これは、サーバー群全体の景観を戸惑わせたことは言うまでもありません。

つまり、提案そのものを実現するのは難しいことではないのですね。

レナート :実はこの質問、間違っているんです。開発者は怠惰にならず、まさにこの世界を自滅させることによって、他の世界を自分に合わせることを強いるべきです。

このスレッドの作者は、自分の怠惰で他人の世界を破壊するつもりはなかったのです。具体的な改善提案をしてくれただけです。そして、ゼロ値が過負荷であることが判明したと説明した。

 

enum名要素のスコープとして、少なくともclassを導入したい。

void test1() { enum ENUM_1 { ELEM1 }; }
void test2() { enum ENUM_2 { ELEM1 }; } //ошибка

class A {
        enum ENUM_A { ELEM1 };
};
class B {
        enum ENUM_B { ELEM1 }; //ошибка
};

クラスの理由:ライブラリ(サードパーティを含む)や定義済みの名前と予期せず衝突する可能性があるため、ユニークな名前を考えなければならない。また、SL、TP、PRICEなどのenum要素は、競合の心配なく、複数のクラスで同時に似たような名前を使用することができます。

機能の根拠:重要ではない、しかし同時に

 
A100:

enum-named要素に対するスコープを導入したい

クラスの理由:ライブラリや定義済みの名前と予期せず衝突する可能性があるため、ユニークな名前を考えなければならない。また、SL、TP、PRICEなどのenum要素に類似した名前を複数のクラスで同時に使用しても、衝突の心配はありません。

機能の根拠:重要ではない、しかし同時に

C++ではどうなんでしょう?
 
sergeev:
でも、C++ではどうなんだろう?

脚はそこから生まれるというパラドックスなのですが、今になって(制約がある中で)、なぜそこですべてが行われるのかが理解できるようになりました :)

もちろん、すべてのクラスに一意な名前を付けるという方法もありますが、大規模なプログラム、特に一般的な使用を目的としたライブラリでは、このオプションはありません。

 
A100: ラジオボタンに相当するENUM_XXX形式の定義済み列挙型は、現在デフォルトで0番になっていますが、1番にしたいと思います。

これを試してみてください("初期化 "の場合)。

WRONG_VALUE。

定数は暗黙のうちに任意のenum 型にキャストすることが できる。

-1