【问题标题】:Changing the value of a macro at run time在运行时更改宏的值
【发布时间】:2013-10-25 03:50:17
【问题描述】:

我正在使用 C++ 代码在 Visual Studio 2010 中工作。我要做的是在运行时更改预处理器指令的值,不确定是否可行,但我已经尝试过了..

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 以使类对象使用其他方法的不同实现?或者如果不可能,还有什么方法可以解决这个问题?

【问题讨论】:

  • 您不能在运行时更改预处理器指令。使用具有不同派生类的基类可能会起作用,具体取决于您的问题(从您向我们展示的内容很难判断)。

标签: c++ visual-studio-2010 macros c-preprocessor


【解决方案1】:

您似乎对“预处理器”指令的性质感到困惑。这些仅在编译器处理之前存在。编译器在编译步骤中消除(替换/处理)宏定义。它们在运行时不存在进行更改。它本身实际上是一种迷你语言,只编译成 c/c++ 代码,然后由编译器处理。

听起来你希望你的类是基于某种运行时输入的两个不同的东西。这可能表明存在设计问题。您可以考虑定义两个不同的类(可能使用一个普通的普通基类)。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多