gpt4 book ai didi

c++ - 未初始化对象列表

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:08 27 4
gpt4 key购买 nike

所以这是我的目标,我想实例化一个基于字符串和整数的对象。我目前的想法是:

1) 创建可能对象的列表2) 每个对象都有一个静态方法,它接受一个字符串和整数并返回 true,如果传递的内容与该对象的静态成员匹配。3) 然后迭代可能对象的列表,如果它返回 true 则调用该对象的静态函数然后实例化该特定对象:

伪代码:

// Pseudo Definitions
class CoolObject
class CoolObject2: public CoolObject ....
class CoolObject3: public CoolObject ....

// List of Objects
std::list<CoolObject> list_of_possible_objects;
list_of_possible_objects.push_back(CoolObject);
list_of_possible_objects.push_back(CoolObject2);
list_of_possible_objects.push_back(CoolObject3);

// Inside of the matching function
for (std::list<CoolObject>::iterator it=list_of_possible_objects.begin(); it != list_of_possible_objects.end(); it++) {
if(*it::is_cool_object(string, int)) {
return *it(string1, string2); //Assume the constructor takes some objects that were passed into the function
}
}

然而,这似乎是一个梦想,因为 C++ 不允许拥有未实例化的对象。

我确信我可以使用某种映射和 switch 语句来做到这一点,但在我看来这似乎更优雅,所以我先去做了。

有没有我可以遵循的与此类似的模式?或者有没有办法让我的要求合法化?

我宁愿不维护一个巨大的 map ,我宁愿只拥有一个对象列表,并询问每个对象是否是一个对象,然后实例化,如果拥有一个巨大的 map 和 switch 语句是唯一的方法,那很好。我想也许可以问问一些专家,这是否可能,或者在放弃这种方式之前是否有更好的方法。

感谢大家的帮助!

最佳答案

店铺 std::optional<T> ,这可能就是您正在寻找的:基本上只是一个标志,用于判断对象是否已构造,以及对对象 iff 构造的引用。请注意,您不能保留标志,因为您需要知道是否运行析构函数。

关于c++ - 未初始化对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277643/

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