問題タブ [forward-declaration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 内部構造体/クラスを宣言しますが、定義しません-合法的なC ++かどうか?
次のコードは合法的なC++ですか?
Visual C ++とGCCはどちらもそれを受け入れますが、コードは私には少し奇妙に思えるので、将来のコンパイラーによって拒否されるのは嫌です。
それでも、このパターンはコンパイル時の依存関係を減らすのに役立つようです。同じcppにあるいくつかの関数間で共有される「コンテキスト」(変数の束)を渡すために使用される構造体を宣言するためによく使用します。このようにして、パブリックインターフェイスに「コンテキスト」定義を導入する必要はありません。
python - Pythonで関数を前方宣言することは可能ですか?
Pythonで関数を前方宣言することは可能ですか? cmp
宣言する前に 、独自の関数を使用してリストを並べ替えたい。
cmp_configs
呼び出しの後にメソッドの定義を配置するようにコードを編成しました。次のエラーで失敗します。
cmp_configs
メソッドを使用する前に「宣言」する方法はありますか? それは私のコードをきれいに見せますか?
この問題が発生しないように、コードを再編成する必要があると言う誘惑に駆られる人もいると思います。ただし、これがおそらく避けられない場合もあります。たとえば、何らかの形式の再帰を実装する場合などです。この例が気に入らない場合は、関数を前方宣言することが本当に必要なケースがあると仮定してください。
Python で関数の前方宣言が必要になる次のケースを考えてみましょう。
whereend_condition
とend_result
は以前に定義されています。
コードを再編成し、常に呼び出しの前に定義を配置する唯一の解決策はありますか?
c++ - テンプレート継承のためのネストされたクラス前方宣言
テンプレート引数が継承クラス内のネストされたクラスであるテンプレートクラスから継承する適切な方法は何ですか?
c++ - 前方宣言のあるデフォルトのテンプレート パラメーター
それらの引数を指定または知らずに、デフォルト引数を使用するクラスを前方宣言することは可能ですか?
boost::ptr_list< TYPE >
たとえば、Boost ライブラリ全体を特性を含むすべてのファイルにドラッグすることなく、Traits クラスで aを宣言したいと考えています。を宣言したい
namespace boost { template<class T> class ptr_list< T >; }
のですが、真のクラス宣言と完全に一致しないため、うまくいきません。
私のオプションは、それと一緒に暮らすこと、またはboost::ptr_list< TYPE, boost::heap_clone_allocator, std::allocator<void*>
私の特性クラスで指定することだけですか? (後者を使用する場合は、declareboost::heap_clone_allocator
と includeも転送する必要が<memory>
あると思います。)
私は Stroustrup の本、SO、およびその他のインターネットを調べましたが、解決策は見つかりませんでした。通常、人々は STL を含めないことを懸念しており、解決策は「STL ヘッダーを含めるだけ」です。ただし、Boost はより大規模でコンパイラを多用するライブラリであるため、どうしても必要な場合を除き、省略したいと思います。
c++ - C++ を使用して 2 つのクラスが互いに認識できますか?
だから私はいくつかのクラスB関数を呼び出したいクラスAを持っています。だから私は「bh」を含めます。しかし、クラス B では、クラス A の関数を呼び出したいと考えています。「あ」を入れると無限ループになってしまいますよね?私はそれについて何ができますか?
c++ - クラスの前方宣言が C++ で機能しないようです
次のコードは VC++6 でコンパイルされています。C2079: 'b' uses undefined class 'B'
次のコードでコンパイル エラーが発生する理由がわかりません。
クラス B ソース
クラス B ヘッダー
構造体ヘッダー
クラス B ヘッダーを次のように変更すると、エラーは発生しなくなります。しかし、ヘッダー宣言は先頭にありません!
奇妙なヘッダー宣言を持つクラス B ヘッダー
c++ - 前方宣言とtypeid
A
スーパークラスのタイプをサブクラスのタイプと照合したいと思いますB
(スーパークラス内のメソッドをA
使用して、それB
を継承します)。
これが私がトリックをしたと思ったことです(つまり、前方宣言の使用):
ただし、このコードはコンパイルされません。私が得るエラーは次のとおりです。
どうすればこの問題を解決できますか?
c++ - enable_if を使用する関数の前方宣言: あいまいな呼び出し
を使用する関数を前方宣言するのに問題がありますboost::enable_if
。次のコードではコンパイラ エラーが発生します。
コンパイル時に、「foo へのあいまいな呼び出し」エラーが発生します。の定義によるとenable_if
、'type' typedefvoid
は条件が true の場合に対応するため、私が見る限り、2 つのシグネチャはfoo
一致します。なぜコンパイラはそれらが異なると考えるのですか?また、前方宣言する正しい方法はありますかfoo
(できれば、その部分を繰り返さないでenable_if
ください)?
javascript - Javascript でのあいまいな関数宣言
私はJavascriptが初めてで、関数宣言の仕組みに混乱しました。私はそれについていくつかのテストを行い、いくつかの興味深い結果を得ました:
前方宣言が機能し、ポップアップが「言う」
反対側に
関数オブジェクトも宣言しましたが、機能しませんでした
関数を宣言し、後で再宣言すると、次のようになります。
「話す」ではなく「言う」をもらいました。それは驚きです!
わかった。最新の関数宣言だけが動くようです。次に、最初に関数オブジェクトを宣言し、次に「通常の」関数を宣言します。
もう一つ驚いたのは、「speak」に続いて「speak」だったことです。「通常の」関数宣言はまったく機能しませんでした!
それらすべての説明はありますか?そして、「通常の」関数宣言が本当に「脆弱」であり、同じ名前の関数オブジェクトによって簡単にオーバーライドできる場合、それを避けるべきですか?
もう 1 つの質問は、関数オブジェクト形式だけでは、その前方宣言は不可能になるのでしょうか? Javascriptでそれを「シミュレート」する方法はありますか?
c++ - C++フォワードクラス宣言ジェネレータ
ファイルのリストを調べて、遭遇したクラスの前方宣言を含むヘッダーファイルを吐き出すツールはありますか?理想的には、それをVisualC++のビルドプロセスに統合したいと思います。