c++中#定义的标识符有问题
Trouble with #defined identifier in c++
我正在编写一个广泛依赖标识符的程序:
#define NUMBER_OF_ELEMENTS 12
该参数用于多个项目(在一个解决方案中)。问题是我有两个模式:第一个NUMBER_OF_ELEMENTS是12,第二个NUMBER_OF_ELEMENTS等于16。
有没有办法在运行时更改参数的值?如果没有,周围还有工作吗?
提前感谢!
#define
为预处理器提供常量。它们在运行时不可用,也不能直接用于编译器本身。
如果希望在运行时更改此值,则需要使用运行时变量。定义这一点的最佳方式在很大程度上取决于程序的结构。
正如其他人已经说过的,您不能在运行时更改此值,因为预处理器在编译前会将NUMBER_OF_ELEMENTS更改为12/16。
您可以从将NUMBER_OF_ELEMENTS更改为全局常量开始。当然,这也不是一个很好的解决方案,但你可以从那里开始(也许是一些对象管理它,如果不了解你的程序的细节,我真的无法告诉更多)。
C++宏在编译时使用,如果您需要在运行时更改的内容,可以创建全局或静态变量。
如果是一个整数参数,很多代码都依赖于该参数,那么在运行时更改最好通过从一个实现更改到另一个实现来实现,最好使用模板:
代码中。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();
}
}
代码.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
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 我在范围内未声明的错误类有问题
- 我的C++语言蛮力算法有问题
- 我关于函数"Assert"的C++代码有问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++类中的友元函数有问题?
- 我对数组即 0x6dfe78 有问题
- 我对 std::unique(算法)C++有问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 这个模板为什么有问题?如何正确编译
- 我对 MyGraph 属性顶点名称和边权重有问题
- delete[]有问题,如何部分删除内存
- 在C++中使用exit()退出程序有问题吗
- 跳转到if(false)块有问题吗
- 查找有问题的宏
- 使用 rand() 和 srand() 有问题
- C++ 回文程序总是给出 0(假)作为输出问题;我的代码哪里有问题?
- 我在 C++ "out_of_range at memory location"有问题
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- c++中#定义的标识符有问题