可変引数テンプレート関数で decltype を使用するトレーリング戻り型
引数を累積して合計を返す基本的な加算関数を実装しようとしているとき適切な型を使用すると、コンパイラが戻り値の型を正しく推定できないという問題が発生しました。
コード スニペット:
上記のコードでは、 3 つ以上の引数が関係する場合、コンパイラは戻り値の型を解決するのに苦労します。これに対処するために、ユーザーは関数宣言を変更しました。
この変更により問題は解決されましたが、別の問題が発生しました。関数は、混合型の引数に対して望ましくない整数を返しました。
ディスカッションと解決策:
この問題は、decltype を使用した後続の戻り値の型が、戻り値の型が指定された後にのみ宣言されているとみなされるために発生します。ただし、この場合、戻り値の型は sum の再帰呼び出しに依存します。
これを解決するには、カスタム特性クラスが導入されます。
decltype を typename sum_type< に置き換えることで、 T,P...>::type、問題は解決されました。あるいは、ユーザーは sum_type クラスの最後の特殊化を変更して、演算子の正しい関連付けを確保することもできます。
これらの変更により、加算関数は引数を正確に累積し、正しい型で期待される合計を返します。
以上が後続の戻り値の型と `decltype` を使用した可変個引数テンプレート関数で正しい戻り値の型を推定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。