gpt4 book ai didi

c++ - const 成员函数的 std 函数包装器

转载 作者:行者123 更新时间:2023-11-30 02:29:05 26 4
gpt4 key购买 nike

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com