所以在标题中用这句话来表达这个问题有点困难。
基本上,我有一个班级' Person'。 此人通过此功能指向导师
void Person::setMentor(Person* person) {
// bunch of conditions
mentor = person;
}
我的一个条件必须是最多可以有4个级别的人物导师。所以我想检查是否
person->getMentor()
存在,如果它超过三次,则层次结构太大,方法将返回错误。任何想法我如何更优雅,而不是写一个巨大的线?
答案 0 :(得分:1)
你所拥有的基本上是一个链表,你可以迭代并检查:
int depth;
for (depth = 0; depth < MENTOR_LIMIT; depth++) {
if ((person = person->getMentor()) == NULL) {
break;
}
}
if (depth >= MENTOR_LIMIT) {
// return error
}
答案 1 :(得分:1)
鉴于
Person person;
person.mentor = new Person;
person.mentor->mentor = new Person;
person.mentor->mentor->mentor = new Person;
以下代码
auto countMentors(const Person& person)
{
std::size_t count = 0;
for(auto p = &person; p->getMentor() != nullptr; p = p->getMentor())
{
++count;
}
return count;
}
将返回3
。