任何实例访问(类的)所有实例
Any instance access all instances (of a class)
这似乎是一个微不足道的问题,或者我可能误解了之前的信息/到目前为止我所做的研究。
但是有可能有一个对象的函数(在c++中),可以访问自己类型的所有实例吗?
在我的用法上下文中。我想有一个Button
类,我可以简单地实例化多个Buttons
,但调用一个函数可以调用引用所有按钮。
ButtonInstance.isMouseTargetting(cursorCoordinates);
这可能吗?如果是这样,它是否有效?
或者我应该让拥有Button
实例的类调用每个实例来检查鼠标坐标是否匹配?
我的印象是你正在寻找如何设计这个的建议。
在我的用法上下文中。我想要一个Button类可以简单地实例化多个按钮,但调用一个函数可以吗调用引用所有按钮
您希望在按钮容器中执行此操作。按钮不是按钮容器,在GUI上下文中,您已经建立了层次结构。
或者我应该让拥有Button实例的类调用每个实例实例来检查鼠标坐标是否匹配?
是的。您可能已经为此创建了一个窗口/容器类
你的问题更多的是关于设计模式而不是c++本身。看看四人帮的书,你会找到一个合适的实现。
例如,您可以创建一个为给定类创建的所有对象的列表,
class Button {
public:
Button() {
_buttonList.push_back( this );
// assign index/handler to this button
}
~Button() {
_buttonList.erase( _handle );
}
static bool isMouseTargeting( float x, float y ) {
for ( auto button : _buttonList ) {
// check if inside
}
return false;
}
private:
static std::list< Button* > _buttonList;
// Handler _handle;
}
这只是你可以做的一个非常一般的例子。除了列表之外,您还可以使用任何其他容器(完全由您决定),并且您必须找到一种方法来索引每个按钮(或创建句柄),以便稍后可以在析构函数中删除它。
注意默认构造函数(copy或move)。如果你没有显式地创建你的构造函数,那么你的一些按钮将不会进入列表,所以要么自己创建它们,要么删除它们。
Button( const Button& button ) = delete;
这是你要求的一种方法,但不一定是最好的解决方案。如果您自己将按钮添加到非静态容器中,然后从那里进行搜索,可能会更简单。
简短的回答是肯定的。但我不建议把这个功能放在按钮类,因为这会增加额外的(也许不是预期的)责任。您可以通过将Button对象存储在某个集合上,然后调用一个函数来检查鼠标针对的是哪个按钮,从而实现所需的行为。
另一个解决方案是将按钮集合存储为代表用户界面的更高级类的成员。通过这种方式,您可以调用该类的一个方法并检查鼠标光标当前是否在某个Button上。使用这种设计,您可以轻松地为其他GUI元素添加相同的支持(如果需要)。
- 初始化指向类实例的智能指针并访问其方法
- 如何从实现接口的模板化类实例访问结构
- 访问同级类实例的成员
- 从模板参数包实例化的访问类实现
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 限制多模板参数朋友函数可访问的类实例的范围
- 从 QT Widget 对象实例访问 QT Widget 子成员
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 从C++中的父类实例访问子类方法
- 我可以从 C++ 中的派生实例访问指向基本实例的指针吗?
- c++单例类实例访问整个应用程序
- 为什么我无法从基类的实例访问受保护的成员?
- 为什么可以从派生实例访问基类中的受保护变量
- 尝试从从 DLL 加载的驱动类实例访问基类向量成员时,程序崩溃
- 通过外部类的实例访问嵌套的内部类
- 通过对象实例访问私有静态成员
- 如何在c++中从一个实例访问另一个实例的信息
- 任何实例访问(类的)所有实例
- 从子类实例访问和更改父值
- 在c++中,通过指针或实例访问类/结构的优点是什么?