Здравствуйте, vopl, Вы писали:
C>>Скажите, ну вот какой пиииииии в комитете не догадался сделать так, чтобы часы можно было вызывать через виртуальный метод?!?
V>У разных часов разные временные пространства. Чтобы их оформить виртуальными методами — надо иметь некое общее пространство времени. Такового не придумали... А предложи интерфейс часов с виртуальными методами, как бы это могло выглядеть на твой взгляд?
Вот так:
struct timestamp_t {
int64_t epoch_seconds;
uint32_t nanos;
};
class clock_t
{
public:
virtual ~clock_t() = default;
virtual timestamp_t now() const;
};
Всё, вопрос закрыт. Этот код решает проблемы с временим на ближайшие 200 миллиардов лет, с точностью до наносекунд.
Если хочется мастурбировать на шаблоны, и теоретические потребности поддержки разных эпох, то ну сделайте так:
template<class Timespace> struct timestamp_t {
int64_t epoch_seconds;
uint32_t nanos;
};
template<class Timespace> class clock_t {
public:
virtual ~clock_t() = default;
virtual timestamp_t<Timespace> now() const;
};
Т.е. чтобы нельзя было случайно присвоить две отметки времени с разными эпохами.
Но даже это тупо не нужно. Все давно стандартизовались на Unix-эпохе. При необходимости она тривиально преобразуется в любую другую простым прибавлением константы.