【发布时间】:2019-10-10 03:58:53
【问题描述】:
在下面的代码sn-p中,我希望能够从doWork调用A::foo。
但是,由于foo 有两个重载(const 和非const),编译器无法解析我在调用doWork 时的意思。
有没有办法告诉编译器我的意思是哪个。
我无法更改struct A。
我可以在 doWork 的签名或 doWork 的调用中做一些事情来总是选择说 const 吗?
我知道的一个解决方案是将函数指针类型作为doWork 的参数而不是模板(像这样)
void doWork(void (A::*fun)(void) const){
但这有点难看,我希望找到一个基于模板的解决方案(如果存在的话)
struct A{
void foo() const {
}
void foo(){
}
void bar(){
}
void bar() const {
}
};
template<typename F>
void doWork(F fun){
const A a;
(a.*fun)();
}
int main()
{
doWork(&A::foo); //error: no matching function for call to ‘doWork()’
doWork(&A::bar); // error: no matching function for call to ‘doWork()’
return 0;
}
【问题讨论】:
标签: c++ member-function-pointers