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

Initialize vector of hardcoded int for different platforms

本文关键字:编码 int 向量 初始化 平台      更新时间:2023-10-16

我在初始化不需要更改的名为 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)));