指向成员函数解析的指针
Pointer-to-member function resolution
这里有一个用于筛选对象列表的函子。它必须用指向对象类的成员函数的指针来实例化,作为访问不同元素的一种方式。
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":筛选器。h:48:27:错误:必须使用">'或'->'调用指向'((const)中成员函数的指针Filter_Compare*)this)->Filter_Compare::fun(…)',例如'(…->*((const Filter_Compare*)this)->Filter_Compare::fun)(…)'筛选器.h:48:53:错误:必须使用">'或'->'调用指向'中成员函数的指针((constFilter_Compare*)this)->Filter_Compare::fun(…)',例如'(…->*((const Filter_Compare*)this)->Filter_Compare::fun)(…)'
我不认为这里有问题,因为我已经在另一个类上使用了这个,没有任何错误(好吧,至少它是编译的,我现在不能运行它),代码是:
lit_type eval(文件&f)常量{return f.*(this->fun())-thValue;}
这里到底出了什么问题?我不知道如何用另一种方式引用指针。谢谢
.*
或->*
。要在File& f1
上调用fun
,则调用为(f1.*fun)()
。所以:(f1.*fun)().compare((f2.*fun)())
。如果您想用不需要的显式this->
来复杂化表达式,则必须格外小心:(f1.*(this->fun))().compare((f2.*(this->fun))())
。
括号错误:
int eval(File& f1, File& f2) const {
return (f1.*fun)().compare((f2.*fun)());
}
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址