Каждый часовой пояс имеет число, например, американский/центральный =-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.
Вы пытаетесь явно проверить, предоставляют ли типы, переданные в качестве аргументов шаблона, необходимые концепции. Если не считать концептуальной функции, которая была исключена из C ++ 0X (и, таким образом, являясь одним из главных виновников того, что он превратился в C ++ 1X), определенно сложно провести надлежащую проверку концепции. С 90-х годов было несколько попыток создать библиотеки проверки концепций без языковой поддержки, но, в основном, все они были достигнуты, чтобы показать, что для того, чтобы делать это правильно, концепции должны стать особенностью основного языка, а не чем функция только для библиотеки.
Мне не нравятся ваши идеи наследования вместо typedef
и использования enable_if
. Как вы сами сказали, он часто скрывает реальный код только ради улучшения сообщений об ошибках компилятора.
Я считаю, что статическое утверждение намного лучше. Это не требует изменения фактического кода, мы все привыкли к проверкам утверждений в алгоритмах и научились мысленно пропускать их, если мы хотим понять фактические алгоритмы, это может создавать более качественные сообщения об ошибках, и это будет перенесено на C ++ 1X лучше, который будет иметь static_assert
(полностью с сообщениями об ошибках, предоставляемыми конструктором классов), встроенными в язык. (Я подозреваю, что BOOST_STATIC_ASSERT
просто использовал встроенный static_assert
, если он доступен.)
static_assert
(полностью с сообщениями об ошибках, предоставляемыми конструктором классов). (Я подозреваю, что BOOST_STATIC_ASSERT
просто использовал встроенный static_assert
, если он доступен.) он может создавать более качественные сообщения об ошибках и лучше переносится на C ++ 1X, который будет иметь встроенную в язык static_assert
(полностью с сообщениями об ошибках, предоставляемыми конструктором классов). (Я подозреваю, что BOOST_STATIC_ASSERT
просто использовал встроенный static_assert
, если он доступен.)