Можно ли выборочно компилировать в определенных разделах кода с помощью шаблонов, или это ограничено препроцессором?Например, если я хочу удалить часть кода с помощью препроцессора, я знаю, что могу сделать:
#if 0
static const char[] hello_world = "hello, world";
#endif
Можно ли в любом случае сделать то же самое с шаблонами?
На всякий случайЯ задаю не тот вопрос, вот что я пытаюсь сделать.Я хочу загрузить код при запуске приложения.Обычно я бы просто использовал конструктор, чтобы сделать все, что я хотел, и создать статическую переменную.Но я хочу, чтобы это происходило только в отладочной сборке и чтобы код не запускался во время сборки выпуска.Код, с которым я делаю это, создается с помощью макроса, поэтому я, кажется, не могу поместить «#if 0» внутри макроса и правильно его развернуть.
Есть ли в любом случаесделать это в C ++?
РЕДАКТИРОВАТЬ: Вот пример кода макроса, который я сейчас использую.
#define unittest(NAME) \
struct unittest_ ## NAME : \
public unittest::unittest_template<unittest_ ## NAME> \
{ \
unittest_ ## NAME() : \
unittest::unittest_template<unittest_ ## NAME>(#NAME) {} \
void run_test(); \
}; \
static unittest_ ## NAME NAME ## _unittest; \
void unittest_ ## NAME::run_test()
Код используется путем:
unittest(addTest)
{
assert_(5, 5); // there's an assert statement in the code
}
Мне нравится синтаксис того, как это выглядит, но я не вижу способа избавиться от тела функции с помощью макросов.Вместо этого я попытался использовать макрос начала / конца и получил:
#ifdef UNITTEST
# define unittest_begin(NAME) // previous code
# define unittest_end() // nothing needed
#else
# define unittest_begin(NAME) #if 0
# define unittest_end() #endif
#endif
Это не похоже на работу.
РЕДАКТИРОВАТЬ 2: Оригинальный вопрос сильно отличается от того, во что он превратился.Надеюсь, что имя поменяется, оно больше соответствует актуальному вопросу.