gpt4 book ai didi

c++ - 用不同的值初始化 const 容器的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:15:04 25 4
gpt4 key购买 nike

我有一些容器 struct 包含一组配置元素。

struct config
{
const std::vector<int> config_items;
const std::vector<double> another_items;
}

另外,我有一个“容器的容器”,它应该包含这些配置容器的已知且有限数量的实例(例如 3 个)。每个 config 实例在相应的 vector 中应该有不同的 intdouble

struct setup
{
const std::vector<config> items;
}

所有 vector 的项目都应该是 const,因为它们应该被定义一次并且永远不会改变。

由于 vectorconst,我只能在构造函数初始化列表中初始化它们。但我希望有多个具有不同值的实例。

我可以创建一些子 struct 来在子构造函数中创建每个配置。但这不起作用,因为我无法在子构造函数中初始化父成员:

struct config_1 : public config
{
config_1() : config_items { 1, 2 }, another_items { 1.0, 2.0 } {} // Doesn't work
}

这似乎也是一个非常糟糕的决定(删除 const,制作拷贝...):

struct config
{
std::vector<int> config_items;
std::vector<double> another_items;
}

struct setup
{
std::vector<config> items;
}

void init()
{
config c;
c.config_items = { 1, 2 };
c.another_items = { 1.0, 2.0 };

setup s;
s.items = { c };
}

我也不能制作单个初始化列表构造函数,因为我有多个 vector:

struct config
{
config(std::initializer_list<int> i, std::initializer_list<double> d); // No go
std::vector<int> config_items;
std::vector<double> another_items;
}

背景:我想为我的嵌入式应用程序提供一个硬编码的 const 配置结构(可能放在 DATA 部分甚至闪存中)。无需从任何配置文件等中读取内容。

所以我的问题是:您对我应该如何创建这样一个 const 配置容器有何建议?


编辑

std::vector 在这里实际上是错误的。我正在使用一个自定义容器来保存实例中的数据,例如 std::array 而不是像 std::vector 那样在堆上分配存储空间。

所以环境应该是这样的:

struct config
{
const std::array<int, 2> config_items;
const std::array<double, 2> another_items;
}

struct setup
{
const std::array<config, 3> items;
}

最佳答案

也许只是使用这样的结构?

struct config
{
const std::vector<int> _a;
config(const std::vector<int> &a): _a(a) {}
};

稍后在代码中的某处:

config c1({1, 2, 3});
config c2({3, 4, 5, 6});

好吧,让我们得到完整的样本:

    struct config
{
const std::vector<int> _items;
config(const std::vector<int> &items): _items(items) {}
};
std::vector<config> settings;
settings.emplace_back(config({1, 2}));
settings.emplace_back(config({3, 4}));

关于c++ - 用不同的值初始化 const 容器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com