未初始化对象列表

时间:2016-07-09 02:19:46

标签: c++ design-patterns

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

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语句是唯一的方法,那很好。我想也许会问一些大师,如果这是可能的,或者在放弃这种方式之前有更好的方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

存储 view = inflater.inflate(R.layout.row_layout,convertView,false); ,这可能是您正在寻找的内容:基本上只是一个标志,用于判断对象是否构造以及对iff构造的对象的引用。请注意,您无法保留标志,因为您需要知道是否运行析构函数。