|
|
1
5
如果您认为Notifier对象不是拥有它的Model对象的一部分,因此修改Notifier不会“算作”修改Model,那么将getNotifier设置为一个const方法,返回一个非const引用:
然后,您必须将m_Notifier标记为可变,或者通过指针(或智能指针)或引用而不是包含来拥有它。无论哪种方式,您都可以避免使用const_cast。通常最好嵌入对象而不是指向/引用它们,但如果在这种情况下,通知器不被视为使用它的模型的一部分,那么嵌入就不是必需的。通过引用拥有它会迫使您在构建模型时初始化引用,这会导致依赖注入,这并不是一件坏事。智能指针拥有意味着,与嵌入一样,你不必做任何清理工作。 可能还有其他的设计方法(比如Vinay添加了另一个类),但你的评论“Is non const,因为它需要返回一个非const引用”告诉我,你可以做你最初想做的事情,你只是没有意识到你可以做到。 |
|
|
2
3
我从你的代码中不清楚,但如果你有一个逻辑上为const但物理上为非const的成员,通常的解决方案是将其设置为 可变的 . |
|
|
3
1
相反
你可以打电话
|
|
|
4
1
我另一个答案的替代方法。
根本不要让观察者拿着指向模型的指针。通过a
如果观察者在SetModel中需要一个非const模型,你仍然可以给它一个,但更有可能的是,你会完全摆脱SetModel,只需调用
同样,但不那么彻底,你可以保持现状,但要声明
如果预期观察者能够在没有参数的情况下注销自己,则这些更改都不会起作用。 |
|
|
5
0
您可以创建一个额外的类来封装Notifier对象并实现Notifier,而不是返回const Model。(适配器模式)。观察者可以使用新创建的类进行注册/注销。 |
|
|
6
0
我希望控制员能够解决这个问题: 1.控制器知道模型,并允许视图注册到模型。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |