这是一个用于过滤对象列表的函子。它必须用指向对象类的成员函数的指针来实例化,作为访问不同元素的一种方式。
class Filter_Compare : public Filter {
std::string (File::*fun)();
public:
Filter_Compare(const char *name, const char *desc, std::string (File::*f)())
: Filter(name, desc), fun(f)
{}
~Filter_Compare() {};
int operator () (File* f1, File* f2) { return this->eval(*f1, *f2); }
int eval(File* f1, File* f2) const { return this->eval(*f1,*f2); }
int eval(File& f1, File& f2) const {
return f1.*(this->fun()).compare(f2.*(this->fun()));
}
};
//an instanciation example :
Filter_Compare fname("Name", "Compare by name", File::getPath);
并且 g++ 返回这些错误:
Filter.h:在成员函数'int Filter_Compare::eval(File&, File&) const'中:Filter.h:48:27:错误:必须使用'。' 或 '-> ' 在 '((const Filter_Compare*)this)->Filter_Compare::fun (...)' 中调用指向成员函数的指针,例如 '(... ->* ((const Filter_Compare *)this)->Filter_Compare::fun) (...)' Filter.h:48:53: error: must use '. ' 或 '-> ' 在 '((const Filter_Compare*)this)->Filter_Compare::fun (...)' 中调用指向成员函数的指针,例如 '(... ->* ((const Filter_Compare *)this)->Filter_Compare::fun) (...)'</p>
我在这里看不到问题,因为我已经在另一个类上使用了它而没有任何错误(好吧,至少它可以编译,我现在无法运行它),代码在哪里:
lit_type eval(File& f) const { return f.*(this->fun()) - thValue; }
这里到底有什么问题?我不知道如何以另一种方式引用指针。谢谢 !