Я работаю над парой проектов, которые включают общий код. Проекты выполняются с использованием разных ядер со следующими отличиями:
typedef long long i64;
// typedef unsigned long long u64; // In project A
// typedef unsigned long u64; // In project B
typedef int i32;
typedef unsigned int u32;
typedef short i16;
typedef unsigned short u16;
typedef char i8;
typedef unsigned char u8;
typedef void* Data;
// typedef u32 ptr; // 32b pointer in project A
// typedef u64 ptr; // 64b pointer in project B
Но, конечно, в будущем я хочу поддерживать новые ядра с другой конфигурацией.
Я не эксперт по ООО, поэтому я вижу следующие способы справиться с этим:
1) Создайте 2 копии «ProjDefs.h» и включите его из любого места в проекте (в проекте A «ProjDefs.h» будет иметь содержимое, отличное от проекта B). Я считаю, что это неверный путь (но этим занимаются все в моем отделе).
2) Каждый класс должен наследовать от "Object.h", который будет принудительно применять эти конкретные типы и иметь следующий код:
template <typename Core>
class EV_Object{
typename Core::I64 I64;
typename Core::U64 U64;
typename Core::I64 I32;
typename Core::I64 U32;
typename Core::I64 I16;
typename Core::I64 U16;
typename Core::I64 I8;
typename Core::I64 U8;
typename Core::Ptr Ptr;
};
Пусть каждый класс наследует от него, получая, таким образом, правильные определения типов.
Проблема:
A) Каждый класс должен наследовать от него.
B) Поскольку это шаблон, я не смогу использовать исходные файлы (только заголовки).
Опять же, я далеко не эксперт по С ++, но это также кажется неправильным.
Есть предложения?
Спасибо,
Офер