64,683
社区成员
发帖
与我相关
我的任务
分享
class QueryStudent
{
public:
void query()
{
list<Student>& L = g_SCDataBase.get_StudentList();
list<Student>::iterator a = L.begin();
list<Student>::iterator b = L.end();
list<Student>::iterator it;
while((it = find_if(a, b, this)) != b)
{
m_Result.push_back(*it);
a = ++it;
}
}
list<Student>& get_Result() { return m_Result; }
protected:
virtual bool operator()(const Student& s) = 0;
private:
template<typename Iterator, typename Pred>
Iterator find_if(Iterator first, Iterator last, Pred* cmp)
{
for (; first != last; ++first)
if ((*cmp)(*first))
break;
return first;
}
protected:
list<Student> m_Result;
};
class QueryByName : public QueryStudent
{
public:
QueryByName(string name)
: m_Name(name) { }
virtual bool operator()(const Student& s)
{
return s.get_name() == m_Name;
}
private:
string m_Name;
};
class QueryByNumber : public QueryStudent
{
public:
QueryByNumber(const string number)
: m_Number(number) { }
virtual bool operator()(const Student& s)
{
return s.get_number() == m_Number;
}
private:
string m_Number;
};
class QueryStudent;
class NamePredicate;
class NumberPredicate;