Здравствуйте, Иван Романюк, Вы писали:
ИР>Речь вот о чем: у меня в программе есть участки кода такого вида:
ИР>#ifdef IDENT1
ИР>....
ИР>#endif
ИР>#ifdef IDENT2
ИР>...
ИР>#endif
ИР>Таких участков сравнительно много, проблема в том, что если я где-то ошибусь и напишу вместо, скажем, IDENT2 IEDNT2 — то не скомпилируется кусок кода, но сразу это может быть незаметно — просто какая-то функция в программе не будет работать. Вопрос: можно ли определить такой макрос, скажем, #SafeIfDef (A), который будет проверять принадлежит ли A заданному множеству (в моем случае IDENT1 и IDENT2) или нет, и если нет — генерировать ошибку.
Можно, например, вот так:
#ifdef IDENT1
#define PLATFORM_DEPENDENT(a, b) a
#endif
#ifdef IDENT2
#define PLATFORM_DEPENDENT(a, b) b
#endif
if (some_func() == PLATFORM_DEPENDENT(14, 47))
...
Или так:
#if defined(IDENT1)
...
#elif defined(IDENT2)
...
#else
BOOST_STATIC_ASSERT(false);
#endif
Или так:
#ifdef IDENT1
#define PLATFORM 1
#endif
#ifdef IDENT2
#define PLATFORM 2
#endif
#ifdef IDENT3
#define PLATFORM 3
#endif
template<int id> struct platform_dependent;
template<> struct platform_dependent<1>
{
static void f1() {...}
static void f2() {...}
};
template<> struct platform_dependent<2>
{
static void f1() {...}
static void f2() {...}
};
template<> struct platform_dependent<3>
{
static void f1() {...}
static void f2() {...}
};
typedef platform_dependent<PLATFORM> platform;
int main()
{
platform::f1();
platform::f2();
}