#include <functional>
#include <iostream>
struct Foo {
Foo(int num) : num_(num) {}
void print_add(int i) const { std::cout << num_+i << '\n'; }
int get_num(int i) { return num_;}
void set_num(int i) { num_ = i;}
int num_;
};
int main() {
std::function<int(const Foo *, int)> f_get_num;
f_get_num = &Foo::get_num;
return 0;
}
这会在第error: invalid conversion from ‘const Foo*’ to ‘Foo*’ [-fpermissive]
行生成错误f_get_num = &Foo::get_num
。 Foo::get_num
类型为int (Foo:: *fp)(int)
。任何人都可以解释一下吗?感谢。
答案 0 :(得分:3)
您无法在const
个对象上调用非const
函数。您可以将const Foo*
传递给f_get_num
,但Foo::get_num
采用非常量隐式this
。
以下两个电话同样非法:
Foo foo;
Foo const* const_ptr = &foo;
const_ptr->get_num(42);
f_get_num(const_ptr, 42); // results in const_ptr->get_num(42)
您可以声明get_num
为const
:
int get_num(int i) const { return num_;}
然后您的代码将正常运行。
另一种方法是让你的f_get_num
取非const
参数,但当你的函数是一个吸气剂并且不应该修改时,这不是你要去的方法。对象
std::function<int(Foo*, int)> f_get_num;
f_get_num = &Foo::get_num;