如何将分配给*Child[n]的*Base指向Child数组的下一个元素
How to have a *Base assigned to *Child[n] point to the next element of the Child array?
我有这个[不完整]函数:
void EditorWindow::OnLMClick(SObjectType sOT, short xPos, short yPos)
{
SObject* pSObject;
int nElements;
switch(sOT)
{
case SOT_Tile: nElements=TILETYPE_COUNT; pSObject = pSOTile[0]; break;
case SOT_Surface: nElements=SURFACEBMP_COUNT; break;
case SOT_Object: nElements=OBJECTBMP_COUNT; break;
case SOT_Edit: nElements=EDITBMP_COUNT; break;
default: MessageBox(NULL,"Switch does not include this SObjectType","Error in EditorWindow::OnLMClick()",NULL); return;
}
// From there on, pSObject may be pointing to any array of its child classes
for (int n = 0; n<nElements; n++)
{
if (xPos > pSObject->coor.X &&
xPos < pSObject->coor.X + pSObject->size.Width &&
yPos > pSObject->coor.Y &&
yPos < pSObject->coor.Y + pSObject->size.Height)
{
selectedItemRect.left = pSObject->coor.X;
selectedItemRect.top = pSObject->coor.Y + pSObject->size.Width;
selectedItemRect.right = pSObject->coor.X;
selectedItemRect.bottom = pSObject->coor.Y + pSObject->size.Height;
}
*(pSObject++);
}
Display();
}
我正在尝试让pSObject指向数组pSOTile的下一个元素。我该怎么做?注意,由于我将更新函数,pSObject最终将有可能指向其他子级,而不仅仅是SOTile。
好吧,也许这对你不起作用,但它让我想起了在学校迭代数据结构。通常,我会在类中声明一个类指针成员。既然您想指出的不仅仅是CTile,我将假设您正在使用类继承来实现您的目标,也许不是。
class YourClass : public base {
private:
// Your Stuffs
public:
// More stuffs
}
现在,在base中,声明一个静态向量base*指针,它将始终在构造函数中push_back。然后,当您想要迭代对象时,您可以迭代指针。
class base {
private:
static std::vector<base*> AllMyFoos;
//rest of your foos
}
在.cpp中,不要忘记初始化。std::vector<base*> base::AllMyFoos;
在所有继承基的构造函数中添加:
MyNewClass::MyNewClass() {
AllMyFoos.push_back(this);
//more stuff
}
然后您可以使用迭代并访问所有子函数
//Non iter version because that stuff creeps me out
for (int i = 0; i < AllMyFoos.size(); i++ ) {
AllMyFoos->SomeFunction()
//will access most derived function of SomeFunction() if you declared everything virtual.
//Either can be a base function or a derived function of MyNewClass.
}
我想我会这样做,但我不能简单地将其注入到您的示例代码中,也不知道这是否可能。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 构造函数采用 Base&不被调用
- 将sharet_ptr<Derived>转换为shared_ptr<Base>
- 将 BASE 派生类存储在同一容器中
- 避免矢量中的对象切片<Base><shared_ptr>
- 更改"child's parent's style sheet"时如何将孩子的样式表重置为 Qt 默认样式表?
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 如何从unique_ptr返回unique_ptr的引用<Derived><Base>?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何将unique_ptr<derived>*转换为<base>unique_ptr*?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 从 Base 引用对象调用派生类的成员
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 从"<Base>std::unique_ptr"创建"ClassType<std::unique_ptr>"时出现编译错误<Derived>
- C++ - 打印派生类对象的矢量<base*> 元素
- 为什么在此示例中从unique_ptr自动向上转换<derived>到unique_ptr<base>失败?
- C++:无法将参数1从Child非模板类转换为Parent模板类
- qt get child (Callout) from QChart
- 如何在C++实现继承并解决错误"parent class is not accessible base of child class"?
- 如何将分配给*Child[n]的*Base指向Child数组的下一个元素