問題タブ [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++ - イテレータ付きのテンプレート関数ですが、タイプは固定されています
int
この関数を特定の固定イテレータ値型(ただし、任意のコンテナ型)でのみ呼び出すことができるようにするにはどうすればよいですか?この場合、ProcessIndex()
はint
入力として受け取るため、非プリミティブ型のコンパイルは失敗し、たとえばの警告が生成されfloat
ます。int
ただし、を除くすべてのコンパイルが失敗するように宣言を強制したいと思いますint
。
良い努力にもかかわらず、ここや他の場所で「解決策」を見つけられませんでしたが、それは些細なことですか(?)。
c++ - 子関数のテンプレート引数を指定するには?
だから私は試します:
しかし、望ましい効果を得ることができません - クラス data_child getData に、 のみを返す関数が必要boost::shared_ptr<std::vector<int>>
です。そのようなことをする方法は?
c++ - テンプレート パラメータのデフォルトは新しいものに
このリンクは私の質問に答えないので、ここで質問します。
基本的にはテンプレート関数を書きたい
Out
ここでは、 を呼び出すときに常に指定する必要がありますf
。毎回やりたくないので基本的にはやりたい
つまり、指定しない場合Out
、デフォルトで になりますIn
。ただし、これは C++11 では不可能です。
だから私の質問は、効果を達成する方法はありますか?
- 呼び出し
f(t)
はインスタンス化するf<T,T>(t)
か、より一般的にf<typename SomeThing<T>::type, T>
- 呼び出す
f<U>(t)
とインスタンス化されますf<U, T>(t)
c++ - 最後のパラメーターにパック拡張がない可変個引数関数テンプレート
次のコードがコンパイルされないのはなぜだろうと思います。
このコードは、clangとGCC4.8の両方でコンパイルできません。clangのエラーは次のとおりです。
これはうまくいくはずであり、Tは長さ1のパックであると推定されるべきであるように私には思えます。
基準がこのようなことを禁止している場合、誰かがその理由を知っていますか?
c++ - 関数テンプレートの特殊化と Abrahams/Dimov の例
(この質問では、 Abrahams/Dimov の例に関する知識があると想定しています。)
次のようなサードパーティ コードがヘッダーに含まれているとします。これは変更できません。
質問は:
上記の宣言がそのまま与えられている場合、 (たとえば)の場合にベース テンプレート 1 を特殊化することは可能ですか?T = int *
または、ベース テンプレート 2 の単なる宣言は、ベース テンプレート 1 を (少なくともポインターに対して) 特殊化できなくなったことを意味しますか?
c++ - メンバー関数テンプレート引数のデフォルト値
次のコードはGCC4.5.3でコンパイルされますが、VS 2008および2010ではコンパイルされません。これはVSコンパイラのバグによるものですか、それとも標準ではデフォルトの関数テンプレート引数値の指定が禁止されていますか?
エラーメッセージ
c++ - テンプレート コンストラクターのオーバーロードの問題
3 つのコンストラクターを持つクラス テンプレートがあり、そのうちの 1 つは関数テンプレートです。
私のアプリケーションから、参照型/値、ポインター、および配列を区別し、特定の操作を実行する必要があります。したがって、別のコンストラクターを使用することにしました。
次の方法でコンストラクターを呼び出そうとしています。
問題は、ポインターを持つコンストラクターが定義されている場合、配列コンストラクターが呼び出されないことです。ただし、それをコメントアウトすると、配列が適切に出力されます。
出力:
したがって、構文的には可能であり、配列サイズ N を正しく推測できます。
明らかに、配列コンストラクターが存在する場合、コンパイラーを混乱させています。したがって、コンパイラに自動的に推測させる代わりに、配列コンストラクターのテンプレートパラメーターを指定して、通常の関数とは異なり、テンプレートパラメーターを具体的に指定できないことを確認しようとしました。
オーバーロードを区別するために、配列コンストラクターにダミーパラメーターを導入することを考えましたが、うまくいきません。
これを解決する他の方法はありますか?手がかりをいただければ幸いです。
c++ - C++でデータ構造テンプレートと関数テンプレートを区別するには?
次の方法でテンプレートを使用してデータ構造を作成できることを学びました。
関数は、次の方法でテンプレートを使用することもできます。
違いの 1 つは、最初のケースでは s を使用typename
し、2 番目のケースでは を使用することclass
です。
以下を含むコードを見つけました。
したがって、私が理解できないのは、関数と組み合わせて使用するtypename
(および使用しない) 理由です。class
使うべきではありませんclass
か?
c++ - テンプレート引数リストでテンプレート関数を渡す方法
私がtemplate
関数を持っているとしましょう:
template
この全体を別の人に渡すにはどうすればよいtemplate
ですか?
ファンクターであればproduce_5_function
、問題はありません。
しかし、生の関数テンプレートを使用してこれを実行できるようにしたいと思います。
答えは「これはできない」と思います。
c++ - デフォルトの関数テンプレート パラメータによる予期しないオーバーロードの解決
非常に予期しないオーバーロード解決動作が発生しています。次のコードは、gcc と clang の両方によってあいまいなエラーで拒否されます。
エラーは次のとおりです。
どちらも正確に一致すると予想されますが、最初のパラメーターA<T>
ではT
.
私が驚いたのは、2 番目の署名を次のように変更した場合です。
gcc と clang の両方がコードを受け入れるようになり、最初のオーバーロードを選択するようになりました。
この変更がどのように動作に違いをもたらすかわかりません。明示的に指定も推定もされていない ( U
) テンプレート パラメーターの使用を、そのデフォルト値 ( T
) に置き換えただけです。
繰り返しますが、変更前の動作はそもそも予期しないものであるため、何かが欠けている可能性があります。
誰かが説明できますか:
- 最初のケースがあいまいな理由。と
- なぜ私が行った変更が曖昧さを解決するのですか?
参考までに、私がテストしたコンパイラのバージョンは、gcc 4.8.0 と最近のトランク ビルドの clang です。