std::function テンプレートの引数署名のあいまいさ
あいまいさは、関数
これを説明するには、次のクラスを考えてみましょう。
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
コンパイラは、オーバーロード セットに対して実行可能な関数を見つけようとするときに、潜在的な変換を検索します。この場合、myfunc の両方のコンストラクターは何でも受け入れ、 int(*)() から myfunc
したがって、a(x) または a(y) を呼び出すと、コンパイラーは 2 つの実行可能な関数に遭遇し、あいまいさが生じます。
解決策
std::function のテンプレート引数シグネチャは、関数を宣言および定義するときの型の一部です。ただし、オブジェクトの構築中、署名は無視されます。
曖昧さを回避するには、次のことができます。
以上が`std::function` がテンプレート引数の署名に曖昧さをもたらすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。