#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]
at line f_get_num = &Foo::get_num
。 Foo::get_num
类型为 int (Foo::*fp)(int)
。有人能解释一下吗?谢谢。
最佳答案
您不能对 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
参数,但是当您的函数是 getter 并且不应该修改对象。
std::function<int(Foo*, int)> f_get_num;
f_get_num = &Foo::get_num;
关于c++ - const 成员函数的 std 函数包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39963573/