我在初始化名为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。不要认为有必要添加更多代码。
答案 0 :(得分:2)
如果您需要为不同的平台设置不同的值,并且您需要在代码中进行更改(而不是配置文件),您的代码中最终会得到#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
s的数量减少为1,但整体代码可能最终难以阅读。
当然,您可以更改策略,并将特定于平台的ID放在配置文件中。这可以帮助您避免条件编译,但代价是在配置文件上引入运行时依赖性。
答案 1 :(得分:1)
命名空间?
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
....
答案 2 :(得分:0)
std::vector<int> id_vector (id,id + (sizeof(id)/sizeof(int)));
答案 3 :(得分:0)
id_vector = std::vector<int> (id, id + (sizeof(id)/sizeof(*id)));