Почему void_t используется в Sfinae?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему void_t используется в Sfinae?

Сообщение Anonymous »

Я намерен, чтобы мой вопрос был посвящен: как мы используем void_t для sfinae?. Я понимаю, как используется void_t. Я не понимаю, почему это нужно.template< class , class = void >
struct has_member : std::false_type
{ };

// specialized as has_member< T , void > or discarded (SFINAE)
template< class T >
struct has_member< T , decltype( T::member ) > : std::true_type
{ };
< /code>
Если я прохожу в объекте без «члена», он все равно будет по умолчанию к шаблону по умолчанию, в то время как объект с «членом» будет создавать экземпляр специализации. Я думаю, что это как -то связано со вторым параметром шаблона первичного шаблона, имеющего по умолчанию ('class = void'). Но я не понимаю, почему это важно. Почему специализация должна использовать «void_t», чтобы соответствовать этому параметру по умолчанию? Разве не вся смысл по умолчанию, что они могут быть переопределены? Где я могу прочитать больше о этой теме cppreference.com?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-sfinae
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»