我正在编写一个广泛依赖于标识符的程序:
#define NUMBER_OF_ELEMENTS 12
该参数用于许多项目(在一个解决方案中)。 问题是我有两种模式:第一个NUMBER_OF_ELEMENTS为12,第二个NUMBER_OF_ELEMENTS等于16。
有没有办法在运行时更改参数的值?如果不是有任何解决方法吗?
提前致谢!
答案 0 :(得分:6)
#define
为预处理器提供常量。它们在运行时或编译器本身不可用。
如果希望在运行时更改此值,则需要使用运行时变量。定义此方法的最佳方式取决于程序的结构。
答案 1 :(得分:2)
正如其他人已经说过的那样,你无法在运行时更改此值,因为预处理器会在编译之前将NUMBER_OF_ELEMENTS更改为12/16。
您可以从将NUMBER_OF_ELEMENTS更改为全局const开始。它当然不是很好的解决方案,但你可以从那里拿它(可能有一些对象管理它,如果不知道你的程序的具体细节,我真的无法说出更多)。
答案 2 :(得分:1)
C ++宏用于编译时,如果你需要在运行时可以改变的东西,你可以创建一个全局变量或静态变量。
答案 3 :(得分:1)
如果一个整数参数严重依赖于大量参数,那么最好通过从一个实现更改为另一个实现来更改运行时,最好使用模板:
在code.h中:
#include <stdexcept>
template<int NumberOfElements>
struct ComplicatedCode
{
void run(int, char**);
};
void RunComplicatedCode(int NumberOfElements, int argc, char**argc)
{
switch(NumberOfElements) {
case 12: ComplicatedCode<12>::run(argc,argv); break;
case 16: ComplicatedCode<16>::run(argc,argv); break;
default: throw std::invalid_argument();
}
}
code.cc中的:
#include "code.h"
template<int NumberOfElements>
void ComplicatedCode::run(int argc, char**argv)
{
/* implementation details, depending on NumberOfElements */
}
template void ComplicatedCode<12>::run(int, char**); // instantination for 12
template void ComplicatedCode<16>::run(int, char**); // instantination for 16