問題タブ [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++ - std::enable_ifをパラメーターからテンプレートパラメーターに移動する
基本的にstd::enable_if:パラメータとテンプレートパラメータと同じことをしようとしていますが、コードをコンパイルできません。
パラメータにstd::enable_ifがあり、正常に動作する単純な最初のバージョンがありました。
しかし、テンプレートのものが1つの場所にあり、関数の引数からenable_ifが必要な場合は、より簡潔になると思いました。
ここで、enable_if部分を移動するだけで、次のようになります。
#pragma warning(1:4519)必要だったのは、関数テンプレートのデフォルトの引数がVS2010のエラーであるためです。問題は、それでもコンパイルされないことです。最初のメッセージは次のとおりです。error C2783: 'void foo(T)' : could not deduce template argument for '__formal'
それはやりたくないのですが、次のように呼び出して、必要なテンプレートを明示的に記述してみました。
しかし、それでも機能せず、新しいエラーが発生します。
誰かがこれを修正する方法を教えてくれることを願っています。もちろん、私のスタイルやコードにある可能性のあるその他の問題に関するすべてのコメントを歓迎します。:)
追加の質問:VS2010がデフォルトで関数テンプレートのデフォルト引数を許可しない理由を誰かが知っていますか?
c++ - 関数テンプレート: 型特性によるさまざまな特殊化
クラス テンプレートを考慮すると、タイプ トレイトとダミー イネーブラー テンプレート パラメーターを使用して、特定のタイプのグループにテンプレートの特殊化を提供できます。私はすでにそれを以前に尋ねました。
ここで、関数テンプレートにも同じことが必要です。つまり、テンプレート関数があり、型のグループ (たとえば、 class のサブタイプであるすべての型) の特殊化が必要ですX
。これは、次のような型特性で表現できます。
私はこのようにすることを考えました:
ただし、関数テンプレートでは部分的な特殊化が許可されていないため、これは機能しません。では、どうすればよいのでしょうか?たぶん、型特性を型として持つデフォルトのパラメーターですか?しかし、コードはどのように見えますか?
c++ - 可変個引数テンプレートを使用して関数の引数を出力するにはどうすればよいですか?
この例では、一般的な可変個引数テンプレートと関数を使用しています。に渡された引数を出力したいf
:
しかし、次のエラーが発生します。
実際、可変個引数関数を使用するのはこれが初めてであり、それらの使用方法を正確に理解していません。
また、なぜこれが機能しないのか、それを支援するために何ができるのかわかりません。
c++ - 64 ビット G++ 4.6.3 は、同じサイズであっても、特殊な関数テンプレートで long を long long として扱いません。これはバグですか?
次のコードを検討してください。
32 ビット G++ 4.6.3 はこれを正常にコンパイルし、出力を生成します。
ただし、64 ビット G++ 4.6.3 でコンパイルすると、リンカー エラーが発生します。
f<int64_t>()
コメントアウトされた行でコンパイルして実行すると、次のようになります。
とが同じサイズであっても、64 ビット G++ がf<long>
とf<long long>
を別の関数として扱う正当な理由はありますか? それとも、これは私が報告すべきバグですか?long
long long
c++ - テンプレート関数のインスタンス化に関する移植性の問題
MSVC
からにプロジェクトを移植しBorland C++
ていますが、 で問題が発生していtemplate functions
ます。たとえば、次の
コンパイラ エラーが発生します。
一方、変更された例
正常にコンパイルされます。
投稿のタイトルに示されているように、この問題の一般化は、BCC
引数が関数の引数リスト内で構築される一時オブジェクトとして渡される場合、特定のケースではテンプレート関数と一致しないように見えることです。
BCC
影響を受けるすべてのコードを変更する前に、最初の例が間違っていると考える理由を理解したいと思います。これはコンパイラの欠陥ですか、それとも私のコードはC++
標準に準拠していませんか?
を使用してRAD Studio / C++ Builder XE2
います。
c++ - T および T const でのテンプレート関数のインスタンス化のアドレス
次の設定でそれが可能なことはありますか
check
true
いくつかのために戻ってきますかT
?内部で何が行われているかに依存しますid
か?規格はこれについて何を言わなければなりませんか?
c++ - C++ での部分的なテンプレート関数の指定は機能しますが、なぜですか?
テンプレート化された関数の部分的な仕様が C++ 標準の一部であるかどうか、またはこれがコンパイラ固有のものであるかどうかを調べようとしています。
部分的な指定とは、コンパイラが推測できない型のみを指定することを意味します。したがって、3 つの型を取るテンプレート関数 'f' があり、そのうちの 1 つがパラメーターで使用され、推定できる場合、次の形式で 'f' を呼び出すことができます。f<type, type>(parameter)
次に例を示します。
これを g++ 4.5.3、g++ 4.6.3、VS2010、および VS2012 でテストしました。コンパイラによって広くサポートされているように見えるので、標準の一部であると確信していますが、誰でもそれを確認できますか? これが機能する理由を説明するリソースへのリンクまたはポインタを誰かが持っていますか?
inline - クラス テンプレート + 関数テンプレート
次のようにテンプレートクラスを作成しようとしたとき:
次のエラーが発生しました。
クラス定義内にこれらの特殊化があると、すべてがすぐにコンパイルされました。したがって、テンプレートの構文に何か問題があったと思います。しかし、特殊化されたクラス テンプレートと関数テンプレートが混在する例を見つけるのは困難です。だから、私にとって良いヒントを持っている人を期待してここにたどり着きました。
c++ - テンプレートクラス内のテンプレート関数と同じタイプ
私は次のコードを持っています:
これで、完全にコンパイルされますが、出力は次のようになります。
なぜ最初=3番目に電話をかけないのですか
?
c++ - 遅延関数テンプレートのインスタンス化
このかなり不自然な例では、関数テンプレートを関数に渡そうとしており、関数に関数テンプレートを内部でインスタンス化させたいと考えています。本質的には、ユーザーに関数のタイプと動作を知られたくないのですが、関数テンプレートを渡して自分自身をインスタンス化することができます。自己完結型の例(コンパイルされません):
これは、gcc-4.7.2で期待どおりにコンパイルできず、次のエラーが発生します。
これを回避するために引っ張ることができるトリックや間接的なものはありますか?
ありがとうございました。