определение типа по сравнению с общедоступным наследованием в метапрограммировании C++

Каждый часовой пояс имеет число, например, американский/центральный =-6. Это определяется как смещение в часах до UTC. С тех пор 0000 полночь, можно просто использовать это смещение для нахождения времени в любом часовом поясе, когда это - полночь UTC. Для доступа к этому я полагаю, что можно использовать

 time.timezone

Согласно , Документы Python , time.timezone на самом деле дает отрицательную величину этого числа:

time.timezone

смещение локального (не-DST) часовой пояс, в секундах к западу от UTC (отрицательный в большей части Западной Европы, положительной в США, нуле в Великобритании).

блок цитирования>

, Таким образом, Вы просто использовали бы то число в течение времени в часах, если это положительно (т.е. если это - полночь в Чикаго (который имеет +6 значений часового пояса), тогда это 6000 = 6:00 UTC).

, Если число отрицательно, вычтите от 24. Например, Берлин дал бы-1, таким образом, 24 - 1 => 2300 = 23:00.

9
задан Community 23 May 2017 в 02:09
поделиться

1 ответ

Вы пытаетесь явно проверить, предоставляют ли типы, переданные в качестве аргументов шаблона, необходимые концепции. Если не считать концептуальной функции, которая была исключена из C ++ 0X (и, таким образом, являясь одним из главных виновников того, что он превратился в C ++ 1X), определенно сложно провести надлежащую проверку концепции. С 90-х годов было несколько попыток создать библиотеки проверки концепций без языковой поддержки, но, в основном, все они были достигнуты, чтобы показать, что для того, чтобы делать это правильно, концепции должны стать особенностью основного языка, а не чем функция только для библиотеки.

Мне не нравятся ваши идеи наследования вместо typedef и использования enable_if . Как вы сами сказали, он часто скрывает реальный код только ради улучшения сообщений об ошибках компилятора.

Я считаю, что статическое утверждение намного лучше. Это не требует изменения фактического кода, мы все привыкли к проверкам утверждений в алгоритмах и научились мысленно пропускать их, если мы хотим понять фактические алгоритмы, это может создавать более качественные сообщения об ошибках, и это будет перенесено на C ++ 1X лучше, который будет иметь static_assert (полностью с сообщениями об ошибках, предоставляемыми конструктором классов), встроенными в язык. (Я подозреваю, что BOOST_STATIC_ASSERT просто использовал встроенный static_assert , если он доступен.)

он может создавать более качественные сообщения об ошибках и лучше переносится на C ++ 1X, который будет иметь встроенную в язык static_assert (полностью с сообщениями об ошибках, предоставляемыми конструктором классов). (Я подозреваю, что BOOST_STATIC_ASSERT просто использовал встроенный static_assert , если он доступен.)

он может создавать более качественные сообщения об ошибках и лучше переносится на C ++ 1X, который будет иметь встроенную в язык static_assert (полностью с сообщениями об ошибках, предоставляемыми конструктором классов). (Я подозреваю, что BOOST_STATIC_ASSERT просто использовал встроенный static_assert , если он доступен.)

4
ответ дан 3 November 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: