【发布时间】:2012-02-24 14:38:26
【问题描述】:
几天前,我问了一个与我将要问的关于递归的问题非常相似的问题。这是旧问题的链接:C++ vector loses data in recursive function
我现在感觉很紧张,因为我认为我理解尝试在递归调用中推送到向量的问题,但我现在遇到了类似函数的问题。 这是函数的代码:
void TriangleDynamic::collectRayRecursive(Ray &ray, double binSize, double radius, Point &org)
{
if (getLowestLevel())
{
//this is where I push the ray.
raysPushBack(move(ray));
}
else
{
bool foundIntersectSub = false;
unsigned int ctr = 0;
while((!foundIntersectSub) && (ctr<=getSubTrianglesSize() - 1 ))
{
if (getSubTriangle(ctr).intersect(ray) )
{
foundIntersectSub = true;
getSubTriangle(ctr).collectRayRecursive(ray, binSize, radius, org);
}
ctr = ctr + 1;
}
}
}
该函数是 TriangleDynamic 类的一部分,并以 Ray 作为参数。已知射线与 TriangleDynamic 对象相交,但如果三角形不是“最低级别”三角形,则该函数会查看三角形 subTriangles 以查找哪个 subTriangle 也与射线相交(其中一个将按设计相交) .这是递归调用发生的地方,只有到达最低级别的三角形时,才会将光线推送到称为光线的向量,它是 TriangleDynamic 的成员数据。但是我又一次丢失了数据。有没有办法做到这一点?我不敢相信我之前的问题得到了如此快速和轻松的回答,我想我会再试一次!谢谢!
【问题讨论】:
-
你的光线矢量在哪里?
-
在 TriangleDynamic 作为成员数据。
-
我最初发布后添加了它,但它是一个包含 Ray 对象的向量。
-
这里是
movestd::move吗?显示rayPushBack 函数。方法签名在 C++ 中很重要。 -
'move' 是 'std::move',rayPushBack 函数的代码是 'void RayPushBack(Ray &ray) {rays.push_back(ray) ;}'