問題タブ [function-templates]
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++ - 依存スコープ内での静的関数テンプレートの呼び出し
template<int I> void ft()
struct template 内に静的関数テンプレートがあり、別の関数 template から呼び出して、bool テンプレート パラメーターを from に渡しtemplate<bool B> S
たいとします。ft
template<bool B> void g()
g
S
これを GCC 4.5.2 でコンパイルすると、行に関する 2 つのエラーが発生しますS<B>::ft<12>()
。
- ')' トークンの前にプライマリ式が必要です
- 型 '<未解決のオーバーロードされた関数型>' および 'int' からバイナリ 'operator<' への無効なオペランド
Comeau ( http://www.comeaucomputing.com/tryitout/ ) も、厳密な C++03 モードで、閉じ括弧のすぐ下にキャレットを付けて、「expected an expression」と述べて、その行について不満を述べています。ただし、どちらのコンパイラもこの行について文句を言うことはS<B>::f()
なく、Comeau は実際に最小限の例全体をリラックス モードでコンパイルできます。
のテンプレートを削除g
し、代わりにS
のテンプレート パラメータをインスタンス化すると、次のg
ようになります。
GCC は、厳密な C++03 モードでの Comeau と同様に、正常にコンパイルします。
上記の GCC の 2 番目のエラーから、が 12 未満S<B>::ft<12>
かどうかをテストしようとしているかのように、 の解釈にあいまいさがあるようです。依存スコープ内の型。依存スコープに現れるものが型ではなく関数である場合、あいまいさを解決する方法を知っている人はいますか?S<B>::ft
typename
c++ - テンプレートメンバー変換演算子のコンパイルエラー
クラスに変換演算子関数テンプレートを書き込もうとしていますが、完全には理解できないコンパイルエラーが発生します。
上記のコードにより、次のエラーが発生します
今私が困惑しているのは、コンパイラがreturnステートメントではTestPtr<ABC>::TestPtr(TestPtr<ABC>)
なくpickを試みていることです。TestPtr<ABC>::TestPtr(ABC *)
ただし、最初に目的のコンストラクターを使用して変数を作成してから値を返すと、正常に機能します。また、T*コンストラクターを無駄に明示的にしました。
g++とclang++の両方で試しましたが、同様の結果が得られました。誰かがここで何が起こっているのか説明してもらえますか?
c++ - 暗黙的なパラメーターを使用したC++関数テンプレートのインスタンス化
次のコードが正常にコンパイルされる理由がわかりません。
しかし、以下のように順序を切り替えるA
とB
、コンパイルされません。
編集:アドホックな説明は大歓迎ですが、誰かが仕様を正確に指摘できればもっと良いでしょう。言う。ありがとう!
c++ - C++: 関数テンプレートの問題
どのデータ型でも機能するように、C++ 関数を修正する際に問題が発生しています。ありとあらゆる助けをいただければ幸いです。以下は私のコードであり、私が遭遇し続けるエラーです。
pivotPoint = partition(set, start, end);
関数内で読み取る行については、次のquicksort()
エラーが表示されます。
誰かがそれが何を意味し、どのようにそれを適合させるかを私に知らせることができれば、私は非常に感謝しています.
c++ - C++: Int と String を処理する関数テンプレート
int と double を処理できる関数テンプレートを作成するために、プログラミングの割り当てに取り組んでいます。私はそれをしましたが、楽しみのために、文字列も処理できるようにしたかったのです。これが以下の関数です。文字列を処理するにはどうすればよいですか?
前もって感謝します、
アダム
c++ - C++ で欠落しているテンプレート パラメーターを使用してテンプレート関数を呼び出すことはできますか?
これは、行われたインタビューの質問です。
どの行にエラーがありますか?
テンプレート パラメータが定義と一致しないため、2 行目にエラーがあります。テンプレート パラメータが欠落しているため、5 行目にエラーがあります。
しかし、1行目はエラーではなく、なぜかわかりませんが、テンプレートパラメータも抜けていませんか?
ありがとう !
c++ - オーバーロードされた 2 つのテンプレートのうち、どちらが呼び出されるか?
私はまだテンプレートを見つけようとしています。特殊化ルールについて読みましたが、ここで何が起こっているのかわかりません。
templates.h で次のように定義しました。
これを含めて、このようにメインで呼び出すと
私は得る
ここで問題は、int の最初のほうが 2 番目よりも具体的であるのはなぜですか? 少なくともあいまいで、まったく機能しないはずだと思います。
c++ - インライン テンプレートの特殊化が役立つのはなぜですか? また、インライン化する必要がありますか?
テンプレートの特殊化の問題は、テンプレート パラメーターがどこにも使用されていないため、通常の関数のように扱われることです。
そのため、次のコードをヘッダー ファイルに入れると、最初は機能します。
ただし、ヘッダーが 2 つのファイルに含まれていると、これは機能しなくなります。この場合、(VS2010で)得られるエラーは次のとおりです。
これは、他の多くの質問で述べられているように、インラインキーワードを使用することで修正できます。
今、これは私に2つの質問を提起します:
- これを行う他の方法はありますか?ソースファイルに特殊な関数を入れてもうまくいかないようです。おそらく、ヘッダーに何らかの宣言が必要になるためです。
- インラインは実際に何をしますか?インラインは使用すべきではないというのは、インターネット全体で一般的な経験則のようです。コンパイラは「いずれにせよ、関数を好きなようにインライン展開する可能性が高い」からです。では、コンパイラが「インライン」として宣言した関数をインライン化しない可能性がある場合、なぜこれが機能するのでしょうか?
c++ - テンプレートの typedef を引数として関数テンプレートに渡す
テンプレート typedef を引数として関数テンプレートに渡そうとしています。ただし、次のエラーが発生します。
TestTemplates.cpp:11: エラー: '&' の前に unqualified-id が必要です トークン
TestTemplates.cpp:11: エラー: '&' の前に unqualified-id が必要です トークン
TestTemplates.cpp:11: エラー: '&' の前に初期化子が必要です トークン
TestTemplates.cpp:25: エラー: 'func' はこのスコープで宣言されていません
誰でもこのエラーを修正する方法を指摘できますか。いくつかの投稿を見ましたが、解決策が見つかりません。ありがとう