初始化不同平台的硬编码int的向量

时间:2014-02-27 10:22:04

标签: c++ stl stdvector

我在初始化名为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。不要认为有必要添加更多代码。

4 个答案:

答案 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)));