编辑:这种结构真的很糟糕,不能使用它!
是否可以在C ++ 11中初始化一个指向对象的指针列表(同时初始化所有内容)?
例如,我想说我要创建类型为的my_list
:
list<pair<string, map<string, string> *> *>
。
我想用原始值初始化。
list<pair<string, map<string, string> *> *> my_list = { ??? }
???
:创建指向新原始字符串对的新指针和指向原始字符串映射的新指针。
(为什么我需要这样做:此数据结构存储从文件中读取的配置,但如果找不到该文件,我的代码中需要一个默认值)
答案 0 :(得分:5)
是的,确定:
list<pair<string, map<string, string> *> *> x {
new pair<string, map<string, string> *> {
"hello", new map<string, string> { {"a", "1"}, {"b", "2"} } },
new pair<string, map<string, string> *> {
"world", new map<string, string> { {"a", "1"}, {"b", "2"} } },
};
这是一个糟糕的设计。不要这样做。
答案 1 :(得分:1)
旧帖子,但可能有用 你可以在C中尝试这样的东西,C ++非常相似
Typedef struct {
char *name;
int data;
struct MyList *next;
} MyList;
Mylist junk[] = {
{"One" ,1, &junk[1]},
{"Two", 2, &junk[2]},
{"Three",3, (MyList *) 0}
};
MyList *head = &junk[0];
是指向列表头部的指针.....
这些列表在小型嵌入式互操作程序中非常有用且常见。 Lisp和Forth立即浮现在脑海中。和许多其他地方。
查看stackflow讨论self referential struct definition?
列表手术可能是一个问题,因为编译列表可能存在于非易失性存储器中 - 尽管在更现代的CPU中,这可能是闪存。
正如你在上面的帖子中看到的那样,列表中没有什么本质上不好的东西,它们使用起来很棘手,使用它们的方法并没有像过去那样严格地教授。
您经常尝试的可怕语法(例如)只是C / C ++语言的工件,其设计不能简单地表示代码中的指针列表。
您也可以尝试使用
形式的内容MyList a = {"A",(MyList *) 0};
MyList b = {"B",&a);
另一种常见模式是以编程方式进行初始化
MyList *m = NewMyList("A");
MyListAdd(m,"B");
你在Java中找到了很多这样的容器类库。缺点是您的创业公司可能需要几毫秒的时间。
另一个常见的用法是在上面的数组示例中使用相对链接...,用sizeof(MyList)替换链接。这使得编程更容易,而且列表变得可重新定位 并且可以使用标准的memcpy类型操作复制(例如从FLASH到RAM并返回)。
玩得开心 克里斯