問題タブ [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.

0 投票する
2 に答える
503 参照

c++ - イテレータ付きのテンプレート関数ですが、タイプは固定されています

intこの関数を特定の固定イテレータ値型(ただし、任意のコンテナ型)でのみ呼び出すことができるようにするにはどうすればよいですか?この場合、ProcessIndex()int入力として受け取るため、非プリミティブ型のコンパイルは失敗し、たとえばの警告が生成されfloatます。intただし、を除くすべてのコンパイルが失敗するように宣言を強制したいと思いますint

良い努力にもかかわらず、ここや他の場所で「解決策」を見つけられませんでしたが、それは些細なことですか(?)。

0 投票する
3 に答える
72 参照

c++ - 子関数のテンプレート引数を指定するには?

だから私は試します:

しかし、望ましい効果を得ることができません - クラス data_child getData に、 のみを返す関数が必要boost::shared_ptr<std::vector<int>>です。そのようなことをする方法は?

0 投票する
3 に答える
329 参照

c++ - テンプレート パラメータのデフォルトは新しいものに

このリンクは私の質問に答えないので、ここで質問します。

基本的にはテンプレート関数を書きたい

Outここでは、 を呼び出すときに常に指定する必要がありますf。毎回やりたくないので基本的にはやりたい

つまり、指定しない場合Out、デフォルトで になりますIn。ただし、これは C++11 では不可能です。

だから私の質問は、効果を達成する方法はありますか?

  1. 呼び出しf(t)はインスタンス化するf<T,T>(t)か、より一般的にf<typename SomeThing<T>::type, T>
  2. 呼び出すf<U>(t)とインスタンス化されますf<U, T>(t)
0 投票する
4 に答える
5247 参照

c++ - 最後のパラメーターにパック拡張がない可変個引数関数テンプレート

次のコードがコンパイルされないのはなぜだろうと思います。

このコードは、clangとGCC4.8の両方でコンパイルできません。clangのエラーは次のとおりです。

これはうまくいくはずであり、Tは長さ1のパックであると推定されるべきであるように私には思えます。

基準がこのようなことを禁止している場合、誰かがその理由を知っていますか?

0 投票する
2 に答える
395 参照

c++ - 関数テンプレートの特殊化と Abrahams/Dimov の例

(この質問では、 Abrahams/Dimov の例に関する知識があると想定しています。)

次のようなサードパーティ コードがヘッダーに含まれているとします。これは変更できません。

質問は:

上記の宣言がそのまま与えられている場合、 (たとえば)の場合にベース テンプレート 1 を特殊化することは可能ですか?T = int *

または、ベース テンプレート 2 の単なる宣言は、ベース テンプレート 1 を (少なくともポインターに対して) 特殊化できなくなったことを意味しますか?

0 投票する
2 に答える
804 参照

c++ - メンバー関数テンプレート引数のデフォルト値

次のコードはGCC4.5.3でコンパイルされますが、VS 2008および2010ではコンパイルされません。これはVSコンパイラのバグによるものですか、それとも標準ではデフォルトの関数テンプレート引数値の指定が禁止されていますか?

エラーメッセージ

0 投票する
1 に答える
1543 参照

c++ - テンプレート コンストラクターのオーバーロードの問題

3 つのコンストラクターを持つクラス テンプレートがあり、そのうちの 1 つは関数テンプレートです。

私のアプリケーションから、参照型/値、ポインター、および配列を区別し、特定の操作を実行する必要があります。したがって、別のコンストラクターを使用することにしました。

次の方法でコンストラクターを呼び出そうとしています。

問題は、ポインターを持つコンストラクターが定義されている場合、配列コンストラクターが呼び出されないことです。ただし、それをコメントアウトすると、配列が適切に出力されます。

出力:

したがって、構文的には可能であり、配列サイズ N を正しく推測できます。

明らかに、配列コンストラクターが存在する場合、コンパイラーを混乱させています。したがって、コンパイラに自動的に推測させる代わりに、配列コンストラクターのテンプレートパラメーターを指定して、通常の関数とは異なり、テンプレートパラメーターを具体的に指定できないことを確認しようとしました。

オーバーロードを区別するために、配列コンストラクターにダミーパラメーターを導入することを考えましたが、うまくいきません。

これを解決する他の方法はありますか?手がかりをいただければ幸いです。

0 投票する
4 に答える
1081 参照

c++ - C++でデータ構造テンプレートと関数テンプレートを区別するには?

次の方法でテンプレートを使用してデータ構造を作成できることを学びました。

関数は、次の方法でテンプレートを使用することもできます。

違いの 1 つは、最初のケースでは s を使用typenameし、2 番目のケースでは を使用することclassです。

以下を含むコードを見つけました。

したがって、私が理解できないのは、関数と組み合わせて使用​​するtypename(および使用しない) 理由です。class使うべきではありませんclassか?

0 投票する
2 に答える
9416 参照

c++ - テンプレート引数リストでテンプレート関数を渡す方法

私がtemplate関数を持っているとしましょう:

templateこの全体を別の人に渡すにはどうすればよいtemplateですか?

ファンクターであればproduce_5_function、問題はありません。

しかし、生の関数テンプレートを使用してこれを実行できるようにしたいと思います。

答えは「これはできない」と思います。

0 投票する
1 に答える
357 参照

c++ - デフォルトの関数テンプレート パラメータによる予期しないオーバーロードの解決

非常に予期しないオーバーロード解決動作が発生しています。次のコードは、gcc と clang の両方によってあいまいなエラーで拒否されます。

エラーは次のとおりです。

どちらも正確に一致すると予想されますが、最初のパラメーターA<T>ではT.

私が驚いたのは、2 番目の署名を次のように変更した場合です。

gcc と clang の両方がコードを受け入れるようになり、最初のオーバーロードを選択するようになりました。

この変更がどのように動作に違いをもたらすかわかりません。明示的に指定も推定もされていない ( U) テンプレート パラメーターの使用を、そのデフォルト値 ( T) に置き換えただけです。

繰り返しますが、変更前の動作はそもそも予期しないものであるため、何かが欠けている可能性があります。

誰かが説明できますか:

  1. 最初のケースがあいまいな理由。と
  2. なぜ私が行った変更が曖昧さを解決するのですか?

参考までに、私がテストしたコンパイラのバージョンは、gcc 4.8.0 と最近のトランク ビルドの clang です。