Игнорировать С2039

Препроцессор просто игнорирует эту строку как, к примеру игнорировал бы #if ().

В данной теории не очень силен.

Не по теме:

Немного конкретизирую.
Инъекчу свой код в некое приложение. Приложение оперирует набором сущностей (нужных мне около двадцати). Планируемых версий приложения достаточно много, каждая отличается структурой этой самой сущности. К примеру:

C++Выделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

class Item1_0{
private:
  char pad_0x0000[4];
public:
  int Id;
  int Count;
};
 
class Item2_0{
private:
  char pad_0x0000[4];
public:
  int Id;
  __int64 Count;
private:
  char pad_0x0012[4];
public:
  int Position;
};

Но в целом, набор полей одинаков, отличается смещениями и у более поздних версий есть не сильно значительные дополнительные поля.

Сущностей около 20 на данных момент, планируемых поддерживаемых версий - не меньше пяти.

Структура сущностей восстанавливается программой ReClass, она же умеет генерировать c++ определения(как в примере выше).

На данный момент, добавление новой версии класса выглядит как генерация определения реклассом, добавление его в проект и добавление куска в метод-сборщик данных:

C++Выделить код

1
2
3

if (version == ...){
  item = getItem<Item_Version>();
}

Что гораздо компактнее и легче поддерживать (на мой взгляд офк), нежели поддерживать 20*количество_версий=много конструкторов, в которых запутаться как раз-два. Да еще и отлаживать я могу только машинный код.

Если бы можно было так сделать, как я описал выше.

Судя по тому, что меня приняли за больного, понял, что нет.

Добавлено через 2 часа 30 минут

Решение всё таки нашёл. Вдруг кому нибудь пригодится.

C++Выделить код

1
2
3
4
5
6
7

__if_exists(SomeClassType::b) {
    result.b = aObject->b;
}
 
__if_exists(SomeClassType::c) {
    result.c = aObject->c;
}