所以在处理 my last question 之后,我把它归结为:
我需要将未知数量的用户定义类 (object_c
) 添加到 boost::intrusive::list
.这些类中有 const
成员。要将它们推送到 list
,我需要做的就是构建它们,然后让它们持久存在,它们会自动添加自己。
有问题的代码基本上是
for (unsigned i = 0; i < json_objects.count(); ++i) {
ctor_data = read(json_objects[i]);
// construct object here
}
我尝试过的:
malloc
对象数组,然后填充它们: 不起作用,因为我有const
成员。static object_c *json_input = (object_c*) malloc(json_objects.size() * sizeof(object_c)); ... json_input[i](ctor_data); //error: no match for call to (object_c) (ctor_data&)
制作指针:这不起作用,函数无法正常使用它,并且它不会被破坏
new object_c(ctor_data);
将对象推回
std::vector
: 这行不通,当我尝试 (output here) 时,增加了数十行的咆哮vector_of_objects.push_back(object_c(ctor_data));
只是声明该死的东西: 显然行不通,立即超出范围 (dur)
object_c(ctor_data);
我相信有一种简单的方法可以做到这一点。有人有主意吗?周末的大部分时间我都在处理这个问题。
最佳答案
#3
应该是您需要使用的方法。您需要详细说明您的错误是什么。
如果它只是 operator=
正如你在上一个问题中显示的那样,并且你不想定义一个,你可以尝试 emplace_back
只要你在 C++11
。当然,我说的是 std::vector
,我需要检查 boost::intrusive
中是否有等效项。编辑:我可能错了,但它似乎还不支持移动语义..
或者使用带有智能指针的#2
。
如果您要使用 #1
,您需要使用 placement new
作为 @rasmus 指示。
关于c++ - 如何使用 const 成员构造动态数量的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554180/