2013-10-25 5 views
6

Я работаю в Visual Studio 2010, используя код C++. То, что я пытаюсь сделать, это изменить значение директивы препроцессора во время выполнения, не уверен, если это возможно, но я попробовал это ..Изменение значения макроса во время выполнения

somefile.h

static int mValue = 0; 
#define POO = mValue; 
... 

#if POO 0 
//define class methods 
#else 
//define class methods differently 
} 

main.cpp

main() 
{ 

//Code calls constructor and methods allowed when POO is 0 

//Code increments mValue 

//Code calls constructor and methods allowed when POO is 1 


} 

Как можно изменить POO так, чтобы объекты класса использовали другую реализацию других методов? Или, если это невозможно, что еще один подход к этому?

+5

Вы не можете изменить директивы препроцессора во время выполнения. Использование базового класса с различными производными классами может работать, в зависимости от вашей проблемы (что сложно сказать по тому, что вы нам показали). – Yuushi

ответ

8

Вы, кажется, путаетесь с природой директивы «препроцессора». Они существуют только перед обработкой компилятора. Компилятор устраняет (заменяет/обрабатывает) макроопределения во время этапа компиляции. Они не существуют во время выполнения изменений. На самом деле это мини-язык, который только компилируется в код c/C++, который затем обрабатывается компилятором.

Похоже, вы хотите, чтобы ваш класс представлял собой две разные вещи, основанные на некотором входе во время выполнения. Это может указывать на проблему с дизайном. Вы можете рассмотреть возможность определения двух разных классов (возможно, с общим тривиальным базовым классом).

Смежные вопросы