C – 更改对象的类型
简单来说:
一旦建立,是否可以更改对象的类型? 我尝试过的: 例如给定设计: struct MyClass { int _data; MyInterface* _interface; void DoChangeData() { Interface->ChangeData(*this); } }; MyClass x; x._interface = new DerivedClass1(); x.DoChangeData(); // do something x._interface = new DerivedClass2(); x.DoChangeData(); // do something else 切换_interface允许我们改变类上的操作,但是这需要创建包装器方法(DoChangeData)并且总是将this指针作为参数传递,这很难看. 我更喜欢的更好的解决方案是: struct MyClass abstract { int _data; virtual void ChangeData() = 0; }; 但是,一旦具体类建立起来,与_interface不同,它就无法改变.看起来应该可以提供不同的派生类,不添加任何新字段.有没有办法在下面实现ChangeClass函数? DerivedClass1 x; x.DoChangeData(); // do something x.ChangeClass(DerivedClass2); // ??? x.DoChangeData(); // do something else 注意我在谈论虚拟类,而reinterpret_cast仅适用于非虚拟对象.复制构造函数需要移动现有内存的开销,我也宁愿避免. 解决方法
如果您解释实际问题而不是如何实施解决方案,这看起来就像是可以更好地回答的问题.
我不清楚DoChangeData应该做什么以及它为什么需要引用MyClass. 请澄清问题,以便能够得到满意的答案. 顺便说一句,你可能想看看Visitor design pattern和/或Strategy design pattern. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |