Я работаю над базой кода, в которой у нас есть несколько настраиваемых типов. Одним из таких типов является 64-битное целое число. Когда мы компилируем для платформ, которые не имеют собственного 64-битного целочисленного типа, мы просто представляем 64-битные целые числа, используя структуру, подобную
typedef struct {
unsigned int hi, lo;
} int64;
Чтобы сделать этот тип полезным, все общие операции определены как функции, такие как
int64 int64_add(int64 x, int64 y);
На платформах, где доступен собственный 64-битный целочисленный тип, эти операции просто выглядят как
#define int64_add(x, y) ((x) + (y))
Во всяком случае, на вопрос. Я реализую некоторые функции, касающиеся времени, и я хочу представить свое время, используя 64-разрядное целое число:
typedef int64 mytime;
Я также хочу, чтобы все общие операции, доступные для типа int64, были доступны для моего типа времени:
#define mytime_add(x, y) (mytime) int64_add((int64) (x), (int64) (y))
Проблема в том, что приведение между типами mytime и int64 не разрешено в C (насколько я могу судить, так или иначе). Есть ли способ сделать это без переопределения всех функций add, sub, mul, div и т.д. для типа mytime?
Один из вариантов, конечно, никогда не делать typetime по умолчанию в mytime и просто использовать int64 везде, где мне нужно представлять время. Проблема в том, что я не уверен, всегда ли я хочу представлять время как 64-битное целое число. Также существует проблема читаемого кода ...: -)