Stanislav Korotky: typenameは型名を表す文字列を返します。テンプレート化されたクラスメソッドの内部では、型が "int "の文字列が、そこから呼び出されたコンストラクタの内部では、"string "の文字列が含まれています。
class A { public:
template<typename T>
A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
void f( T t ) { A a( t ); } //вызываем A::A(...)
};
voidOnStart()
{
B b;
int i = 0;
b.f( i );
}
A100:
おっしゃるとおりです。無駄な言葉を使わず、短く、わかりやすく。動作するコードを掲載しました。
その結果、このメソッド内部ではtypenameはintなど、渡された型を正しく定義しますが、Bのコンストラクタ内部ではtypenameは既にstringと等しくなっています。
typenameの結果は常に文字列型 である,つまり
typenameは型名を表す文字列を返します。テンプレート化されたクラスメソッドの内部では、型が "int "の文字列が、そこから呼び出されたコンストラクタの内部では、"string "の文字列が含まれています。
コンパイラは、#endif が欠落していてもエラーを報告しない
好ましくは、そうでなければ、見つけにくいエラー結果:int。
みんな、これはマーケットのバグなのか、それとも完全に正常なのか?
試していませんが、OSではなくハードウェアに紐付いているのであれば、動作しないはずです。ハードディスクを外して、ビデオの違うマザーボードに載せるようなものです。すぐにでも新しいドライバーの募集を開始します。
それとも、私が仮想マシンを 誤解しているのでしょうか?
派生クラスのインスタンスで仮想関数を 呼び出すと、派生クラスではなくベースクラスからその関数が呼び出されることになります。
派生クラスのインスタンスで仮想関数を 呼び出すと、派生クラスではなくベースクラスからその関数が呼び出されることになります。
コンストラクタでは常にそうなっています。なぜ?-> google C++ (クエリ文字列に単語コンストラクタを追加)
ありがとうございます、知りませんでした)MQL5 Referenceに追加すると良いですね、ほら、仮想関数や コンストラクタが記載されているところです。すべての言語でそうなっているわけではありません。