型を定義しているにもかかわらず、Std::Function のテンプレート引数に存在するあいまいさ
このシナリオでは、関数 'a' に複数のオーバーロードが存在します。 std::function:
の個別の署名を受け入れます。あいまいさは、両方の関数
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
基本的に、あらゆるオブジェクトを std::function に変換でき、型の消去が容易になり、次のような処理が可能になります。
問題をさらに詳しく説明するために、次の単純化された例を考えてみましょう。
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
'a' のオーバーロード解決中に、実行可能なオーバーロードを識別できない場合、コンパイラはパラメーターのコンストラクターまたは引数の変換演算子のいずれかを使用して引数を変換しようとします。この場合、変換は myfunc のコンストラクターを介して行われます。
myfunc のコンストラクターは何でも受け入れるため、両方の function
最終的に、これにより、コンパイラは 'a' のどのオーバーロードを呼び出すかを決定できなくなり、曖昧さが生じます。
Toこの問題を解決するには、いくつかのオプションがあります:
以上が`std::function` のテンプレート引数がオーバーロードの解決に曖昧さをもたらすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。