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

 
A100:
クラスの外側にメソッドを配置できることそのものが便利だという意味です。

ああ、拷問に拷問を重ねて、ある秘密を知っておくべきだったことが判明するんだ)。

パターンクラスの特化もあるのかも?よくわからないけど、きっと何か巧妙な方法があるんだろう。サービスデスクでずっと聞いているのですが、黙っているんです。おそらく、彼らにも秘密があるのでしょう。流出 )

 
Alexey Navoykov:

もしかして、パターンクラスも特化してるのかな?

懐かしいなー。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2017.08.16 13:19

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)()
}

それとも、何か別の意図があるのでしょうか?


ZS見つかりました

 
fxsaber:

だから、何年前だ!?

それとも、何か別の意図があるのでしょうか?

ZS見つかりました

いや、関数ではなく、クラスのテンプレートの話をしたのです。

ちなみに、関数テンプレートの特殊化は、実はまだ実装されていないんです。リンク先でなぜか「特化」と呼ばれているものは、実は全く違うものです。そして今は、特定の型によるオーバーロードの可能性があるだけです。特殊化とほとんど同じですが、唯一違うのは、オーバーロードされた関数のシグネチャがすべて同じかどうかをコンパイラが制御しない点です。これは、関数がコード内の異なる場所にある場合に必要です。

 
A100:

その方がずっと便利です。

専門分野がない場合。
 
Alexey Navoykov:

ちなみに、関数テンプレートの特殊化はまだ実装されていない。リンク先で「専門性」と呼ばれているものは、実際にはそうではありません。そして今は、特定の型によるオーバーロードの可能性があるだけです。これは特殊化とほとんど同じで、唯一の違いは、コンパイラがすべてのオーバーロードされた関数のシグネチャのアイデンティティを制御しないことです。関数が異なるコードフラグメントに配置されている場合に必要となることがあります。

例がないと理解できない。

 
fxsaber:

例がないと、わからない。

実は、「ほとんど同じ」と言ったのは、そこそこ大げさなのです。オーバーロードできるのは関数の引数のみ であり、引数とは関係ない他の型名がテンプレートに存在する可能性があるため、この違いは重要である。そして、それらは特化したものでしかありえない。例えば、引数が全くないテンプレート。

template<typename T>
void f() { }

template<>
void f<int>() { }
 
Alexey Navoykov:
議論なき特化?)) 何に特化するのか?
 
Комбинатор:
議論なき特化?)) そして、何のための特化したものになるのでしょうか?
まあ、それは関数の本体 で決めてください。どうしたんですか?そんなニーズがとても多いのです。ダミーのパラメータを渡してやりくりしなければならないので、非常に歯がゆいです。
 
Alexey Navoykov:
何が大変なんだ?
プロでコンパイルして走らせることができれば何もない)
 

ビルド1650へのアップグレード直後、コンパイルされていないExpert Drawをナビゲータ/お気に入りからチャートにドラッグすると、MQL5がファイル「Draw.ex5」を開けず、別のExpert Advisor、すなわちExpertMACDが起動されてしまう。

Drawのコンパイルが終わってから全て修正されましたが、実際

追加:状況は繰り返されます - ExpertMACDは、コンパイルされていないExpert Advisorの代わりに起動されます。