作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这个 [不完整] 功能:
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 中,声明一个静态 vector 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.
}
我想这就是我要做的,但我不能简单地将它注入(inject)到您的示例代码中,也不知道这是否可行。
关于c++ - 如何将分配给 *Child[n] 的 *Base 指向 Child 数组的下一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15987735/
我是一名优秀的程序员,十分优秀!