«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Может ли метапрограммирование помочь определить шаблоны на основе преобразования строк?

Может ли метапрограммирование помочь определить шаблоны на основе преобразования строк?

Опубликовано 13 ноября 2024 г.
Просматривать:828

Can Metaprogramming Help Define Templates Based on String Conversion?

Метапрограммирование: альтернативные критерии выбора шаблона для определения функции

В этом вопросе исследуется концепция определения шаблона на основе возможности преобразования типа к строке. Исходный код использует признак типа is_arithmetic, но вместо этого предлагается использовать критерий, который оценивает, определен ли to_string для типа.

Однако противоположность этому критерию, определяющая, когда to_string не определен, доказывает испытывающий. Следующий код завершается с ошибкой:

template enable_if_t

Для решения этой проблемы в ответе предлагается использовать признак типа void_t Уолтера Брауна, который позволяет создавать следующее:

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T, 
    void_t<decltype(std::to_string(std::declval<T>()))>
    > 
: std::true_type { };

Этот признак типа эффективно оценивает, определена ли to_string для данного типа, тем самым предоставляя альтернативный критерий выбора шаблона, который более точно соответствует исходному замыслу.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3