Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。174件2以下は問題のコードの簡単な例です。0;}このときラムダ式はユニークな型であるので関数オブジェクトfとgは別の型です。g)関数呼び出しは型が一致しないので実体化エラーです。このときに関数オブジェクトでも関数ポインタでも渡せるようにしたいです。a){...}とどちらがいいのでしょうか。するのはどうでしょう。票1もともと、関数オブジェクトをテンプレートで渡すこと自体が推奨されていないことなのでしょうか?いいえ。基本的には「関数オブジェクトをテンプレートで渡す」スタイルの方が推奨されます。C++標準ライブラリでもこのスタイルを取っています。質問と回答もご参考にください。std::functionや関数ポインタを引数に取らせるほうがよほどいい方法でしょうか?std::function方式は、テンプレート方式に比べると呼出しオーバーヘッドが大きくなりがちです。(賢いコンパイラであれば最適化してくれるかもしれません)関数ポインタ方式は、ラムダ式を含む関数オブジェクトが「状態」を持つケースで利用できません。インタフェース設計の選択肢が狭まります。追記にある例であれば、非テンプレートな通常関数を選ぶべきと思います。(この例示の範囲内に限れば)テンプレートを使う理由がなく、必要のない複雑性を持ち込むだけだからです。使う理由付けをするならば、f('X');のように暗黙にint型へ変換可能な型(char)を渡したときの挙動が異なります。このような厳密型一致が本当に必要であれば、テンプレート関数を使う必然性が出てきますね。可変引数なので、2個と言わず何個でも並べられます。args());}関数の戻り値型とシグネチャが全く異なっていてもコンパイルに通ってしまうことが思わぬ間違いに繋がりそうです。std::invoke_resultなどを使いコンパイル時に弾く方法が良いのでしょうか?間違いかどうかは状況によります。防ぎたいのであれば防ぐよう記述するまでです。一例として、全ての引数が最初のものと同じ型かどうかのチェックを入れてみました。個の銅バッジテンプレートパラメータを増やす方法もあると思うのですが、その場合関数の戻り値型とシグネチャが全く異なっていてもコンパイルに通ってしまうことが思わぬ間違いに繋がりそうです。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。公開5周年をお祝いしましょう!🌸コメントで回答する理由を教えてください関連する質問4静的データメンバ定義中のラムダ式がクラススコープになる理由7可変長テンプレートの展開と引数の評価順序についての疑問。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。