問題タブ [template-function]

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 投票する
1 に答える
2136 参照

c++ - テンプレート関数を関数ポインタとして渡す

このテンプレート関数testFuncを C 関数への関数ポインタとして安全に渡すことができますか?? C++ が正しいメモリ アドレスを関数ポインタに割り当てる方法がよくわかりません。混乱は、クラス メンバー関数を関数ポインター引数として渡す同じコードをコンパイルできなかったためです。

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

c++ - 一般的な戻り値の型を持つ関数の特殊化

一般的な戻り値の型を持つ関数の特殊化に関する簡単な質問だと思います。私の質問に答える別の投稿を見つけることができませんでしたが、おそらくその投稿は存在し、私はそれを理解していません (または見つけていません)。したがって、これが繰り返しではないことを願っていますが、
次のコードは私の問題を示しています

A.cpp

使用法:

コードからおそらく収集できることは、 doubleがテンプレート パラメーターである場合に汎用のfunc()関数を特殊化したいということです。ただし、実行すると次のように表示されます。

ジェネリック

ジェネリック

それ以外の:

ジェネリック

ダブル

ジェネリック バージョンが両方とも呼び出されるのはなぜですか? 希望する動作を取得するにはどうすればよいですか?

私の質問に対する答えが「あなたはおそらくこれをやりたくないでしょう」である場合に備えて、実際の状況についても簡単に説明します。コマンドライン引数 (文字列) をさまざまなデータ型 (int、double、bool など) に解析するクラスを書きたいだけです。明らかなアプローチの 1 つは、必要な型ごとに個別の関数を作成することです。別のアプローチとして、値を返す代わりに参照によって変数を渡し、型ごとに関数をオーバーロードすることもできます。

ただし、特殊な関数を使用すると、より拡張可能なコードになると考えていました。私の目標は、一般的なケースでエラーが発生するようにすることでした。「ターゲット タイプのパーサーをまだ実装していません」などのエラー メッセージが表示されますが、特殊なケースごとに適切な文字列からへのパーサーが実装されます。 . これにより、元のクラス ファイルを変更することなく、新しい型のパーサーを後で追加できるようになると考えました。これは、この引数パーサーをライブラリに構築しているためです。

わかりました、うまくいけばそれは理にかなっています。解決策よりも、コードが期待どおりに動作しない理由の説明に興味がありますが、どちらも高く評価されます!

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

c++ - テンプレート関数の特殊化とオーバーロード

テンプレートの特殊化に関するいくつかのスライドから:

2番目の方法がより「適切」なのはなぜですか?

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

c++ - インラインテンプレート機能?

複数のファイルinlineに含まれている場合、テンプレート関数は必要ですか? cppありがとう。

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

c++ - テンプレート関数の既定のパラメーターと型の推論

C++

これらのテンプレート関数のどれも

次の引数なしの呼び出しで何でもコンパイルできるようにします。

fooただし、任意の値で呼び出します (例: foo(2))。

nullptrには特定の型があるstd::nullptr_tため、#1 でデフォルト パラメータに追加の型修飾が必要だとは思いませんでした。#2 と #3 ではデフォルト パラメータの型が明示的に指定されているため、型のあいまいさはないと思いました。

ここで何が問題なのですか?テンプレート関数でデフォルト パラメータを実行する適切な方法はありますか?

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

c++ - 他の関数へのテンプレート関数呼び出し

template functions通常、ヘッダーファイルで宣言および定義されることを理解しています。

私が抱えている問題はtemplate function、他の関数を呼び出すことです。これらの他の関数のプロトタイプは、テンプレート関数自体の前の同じヘッダー ファイルにあります。

コードのその部分:

関数RestoreThreadStateは、このテンプレート関数から呼び出されるいくつかの関数の最初のものです。その他は for ループ内で呼び出されます。

このテンプレート関数をヘッダー ファイルに含める必要があるかどうかはわかりません。ヘッダー ファイルに含める必要がある場合、これらの他の関数を呼び出すにはどうすればよいですか?

MCMLKernel のインスタンス化中にコンパイラから得られるエラー:

  • エラー: 明示的な型がありません ("int" と見なされます)
  • エラー: 変数 "RestoreThreadState" が初期化されていない可能性があります
  • エラー: タイプ「SimState *」の値を使用してタイプ「int」のエンティティを初期化することはできません
  • エラー: ")" が必要です
  • 警告: 宣言は以前の「RestoreThreadState」と互換性がありません

追加の詳細。この関数はすべて CUDA カーネル関数です。MCMLKernel__global__カーネルであり、それが呼び出す残りの関数は__device__カーネルです。Nsight Eclipse Edition と計算能力 1.3 GPU (Tesla C1060 カード 4 枚) を使用しています。

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

c++ - テンプレート関数がテンプレート関数よりもバイナリを作成しない理由

この簡単なプログラムを参照してください

Linuxで gcc 4.6.4 -std=c++0x -O2 -g -Wall でコンパイルします。そしてバイナリファイル 11`238 バイト。

しかし、このコードは 11`150 バイトになります:

また、clang 3.3 でテストしたところ、結果は 5684 バイトとそれに応じて 5636 バイトになりました。

テンプレート バージョン関数がバイナリ コードを作成しないのはなぜですか?