エラー、バグ、質問 - ページ 1963

 
A100:
もしこの違いが大きいのであれば、なぜどちらのバージョンもC++で普通にコンパイルできるのでしょうか?

ここでは、論理に基づいて結論を出したので、C++に関する権威は全くありません。上記、デリファレンスで例を作り直しました。

このような代入を行うだけでよいのです

// typedef void (*fn)();
typedef void (*fn123)();

デリファレンスがどうなるかは、全く別物です。コンパイラに「馬鹿よりも賢く」、C++で行うような動作を求めることもできます。しかし、この解決策は本当に議論の余地があります。

つまり、このような「ヘルプ」はコンパイラに実装することができるのですが、そのアプローチの違いを示しています。

 
A100:
は大丈夫です。どんな違いがあるのでしょうか?

どうやら、コンパイラに単純に渡しただけでは、fは関数へのポインタとは見なされていないようです。

 
Комбинатор:

のように、コンパイラに渡されたとき、fは関数へのポインタとはみなされないようです。

賛成(シンプルで本質的な違いはない)
 
Комбинатор:

のように、コンパイラに渡されたとき、fは関数へのポインタとはみなされないようです。

そして、少なくとも曖昧さはあってはならないことです。

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
  g( f ); // void(*fn)()

  int f = 0;  
  g( f ); // int
}
 
fxsaber:

そして、その曖昧さゆえに、そうすべきではないのです。

元の例ではそのような曖昧さはなかったのですが......。あなたが作ったものだから...で、それを使ってすべてを説明したんですね。
 
fxsaber:

そして、その曖昧さゆえに、そうすべきではないのです。

typedefはある型の別名であって、別の型ではないので、なぜ型名が型ではなく別名を表示するのか、開発者にとっては実に大きな疑問である。
 

コンパイル時のエラー

struct A {
                void f() {}
        static  void f( int ) {}
};
template<typename T>
void g( T ) {}
void f( int ) {}
typedef void (*fn)( int );
void OnStart()
{
        g(  (fn)   f ); //(1) нормально
        g(  (fn)A::f ); //(2) error: '(void(*fn)(int))' - cannot resolve function address
        fn ff = A::f;
        g( ff        ); //(3) нормально
}

(1)がOKなら、(3)がOKなら、なぜ(2)でエラーになるのか?
 
Комбинатор:
typedefはある型の別名であって、別の型ではないので、なぜ型名が型ではなく別名を表示するのか、開発者にとっては実に大きな疑問である。

私もそう思います。

 

A100:

template<typename T>
string typeof( T ) { return typename T; }

typeofについて教えてください。未経験のプログラマーに向けた良い説明が見つからなかったのです。

 
1回の実行と可視化の間に、ログはこの種の数千の項目で埋め尽くされます。
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order modified [#253  buy limit 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order modified [#253  buy limit 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order modified [#253  buy limit 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order modified [#253  buy limit 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order modified [#253  buy limit 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   take profit triggered #251  sell 1.00 EURUSD 1.18166 tp: 1.18159 [#254  buy 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   deal #251  buy 1.00 EURUSD at 1.18159 done (based on order #254)
2017.08.16 20:26:06.477 2017.08.01 10:04:06   deal performed [#251  buy 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order performed buy 1.00 at 1.18159 [#254  buy 1.00 EURUSD at 1.18159]
2017.08.16 20:26:06.477 2017.08.01 10:04:06   order [#253  buy limit 1.00 EURUSD at 1.18159] triggered

しかも、表示されるまでに長い秒数を待たねばならない。そして、私はOnDeinitで自分で行うログにしか興味がないのです。なぜ、ごく稀にしか読まれないこれらのログを毎回強制する必要があるのでしょうか?Agent Log Viewerに特別なメニュー項目があります。また、最適化の際にこれらのログがなくても、誰も不完全燃焼になることはありません。では、なぜ何百メガバイトもあるこのような邪魔なもの(特に、悪いEAがティック ごとに取引を開始しようとして、Unsupported filled modeになる場合)なのでしょうか?

テスターでフライとカツを分離することは可能ですか?端末と同じように、EA本体からのプリントのログと、端末のログです。各注文ポイントのログにそれらの何万もの不要なメッセージが通過し、バックテスト完了の最後の行を見ることができる間、長い秒数を待つのにうんざりしています。

久々の登場です。迷惑しているのは私だけではないかもしれません。