Шаблоны C ++: введите параметр для проверки правильности - PullRequest
0 голосов
/ 18 сентября 2018
template <
    typename input_currency_type, typename output_currency_type,
    typename validation = convert_debug_policies::fast_validity_currency_type<input_currency_type>
>

fast_validity_currency_type<typename> представляет количество статических_серверций, основанных на заданном типе имени (распознаваемых при специализации шаблона).

Примечание: convert_debug_policies - это пространство имен.

Этот кодкомпилирует.Однако мне было интересно, считается ли typename validation нормальным или слегка неловким.Я могу представить, что это неудобно, потому что тип на самом деле используется только для статических утверждений;он не используется, кроме как во время назначения.Может показаться, что было бы предпочтительнее оставить проверку названий безымянной, но на самом деле я хочу использовать это так, чтобы программист действительно точно знал, что это такое;особенно если дается другая политика отладки (в пространстве имен).

Так что мой вопрос, это хороший способ проверить проверку или я должен использовать другой способ проверки?

НадеюсьЯ не слишком смутен - не стесняйтесь спрашивать, если мне нужно уточнить.Спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Полагаю, что если вы можете использовать его только в статических утверждениях, то все будет constexpr, и вы действительно сможете выполнить проверку стиля SFINAE для параметра шаблона.

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

Ваш вариант использования звучит не как утверждение или проверка, а как проверка того, соответствуют ли типы некоторым требованиям.

Статические утверждения также используются для реализации требований и предоставляют сообщение об ошибке, которое я считаю важным. Пример из cppreference. . Так что это в основном дизайнерское решение.

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

...