为不同平台初始化硬编码 int 的向量
Initialize vector of hardcoded int for different platforms
我在初始化不需要更改的名为 id_vector
的整数向量时遇到问题。
初始值设定项是这样完成的:
static int id[4]{200,300,400,500};
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(int)));
到目前为止一切顺利。 但是现在我们需要拥有该软件的不同版本,我想根据版本选择不同的id数组。我能想到的唯一方法是在#ifdef
或某种宏中执行此操作,但我想知道是否有人知道更好的方法来做到这一点。我在想像命名空间这样的东西,但我不知道这是否是一个很好的用途。
更新
代码中有错别字,对此感到抱歉。抱歉,如果我没有说清楚,但基本上这是一个有效 ID 的列表,有两个版本需要不同的有效 ID。不要认为有必要添加更多代码。
如果您需要为不同的平台放置不同的值,并且需要在代码中进行更改(而不是配置文件),那么您最终会在代码中出现#ifdef
。以下是如何执行此操作的一个例子:
static int id[4]{
#ifdef PLEFTORM_1
200,300,400,500
#endif
#ifdef PLEFTORM_2
100,200,410,522
#endif
};
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(*id)));
另一种解决方案可能是将所有依赖于平台的内容放在单独的文件中,并有条件地包含该文件。这可能会将 #ifdef
秒的数量减少到 1,但整体代码最终可能会更难阅读。
当然,您可以更改策略,并将特定于平台的 ID 放在配置文件中。这将帮助您避免条件编译,代价是对配置文件引入运行时依赖关系。
命名空间 ?
namespace PLATFORM_A
{
static int id[4]{200,300,400,500};
}
namespace PLATFORM_B
{
static int id[4]{500,400,300,200};
}
using namespace USE_PLATFORM;
...
id_vector = std::vector<int> (id,id + (sizeof(id)/sizeof(int)));
使用g++ -DUSE_PLATFORM=PLATFORM_A ...
或g++ -DUSE_PLATFORM=PLATFORM_B ...
或您如何设置USE_PLATFORM
....
std::vector<int> id_vector (id,id + (sizeof(id)/sizeof(int)));
id_vector = std::vector<int> (id, id + (sizeof(id)/sizeof(*id)));
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 如何确定我已使用非编码文件到达 EOF?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 如何在C++中将二进制编码十进制转换为 int
- 在 <char>sizeof(int) == 1 的平台中如何编码 char_traits::eof() ?
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 如何正确编码此函数,以便它计算 int 的每个数字的总和
- c中的neo4j-client,在语句中编码的原始类型(即int)
- 为不同平台初始化硬编码 int 的向量
- 为什么我的编码出现错误无法在函数 main 中将 int 转换为 int *