さまざまなenable_if条件を使用したメンバー関数の選択
enable_ifメタ関数は、テンプレート関数のパラメーターを指定し、それに基づいて適切なメンバー関数を選択するために利用されます。 。次のコードを考えてみましょう:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout ただし、このコードは、「'struct std::enable_if' に 'type' という名前の型がありません」というコンパイラ エラーを引き起こす可能性があります。
enable_if について
enable_if は、オーバーロードの解決中に実行可能な関数オーバーロードのみが考慮されるようにします。テンプレート引数の置換が失敗した場合、そのオーバーロードは候補セットから削除されます。
上記の例では、テンプレート引数 T はメンバー関数のインスタンス化時にすでにわかっています。望ましい動作を実装するには、デフォルトで T に設定されたダミーのテンプレート引数を作成し、それを使用して SFINAE を実行します。
template
struct Point
{
template
typename std::enable_if<:is_same int>::value>::type
MyFunction()
{
std::cout
typename std::enable_if<:is_same float>::value>::type
MyFunction()
{
std::cout
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3