gpt4 book ai didi

c++ - mem_fn 到成员对象的函数

转载 作者:搜寻专家 更新时间:2023-10-30 23:52:46 26 4
gpt4 key购买 nike

我正在修补 std::mem_fn,但无法设法将其绑定(bind)到结构成员的数据/函数(更深一层)。

我希望代码能比我描述的更好地说明问题,因为我不熟悉术语。

#include <functional>

struct Int
{
Int(int _x = 0) : x(_x) {}
int GetInt() const { return x; }
int x;
};

struct IntWrapper
{
IntWrapper(int _x = 0) : test(_x) {}
int GetWrappedInt() const { return test.GetInt(); }
Int test;
};

int main()
{
IntWrapper wrapper{ 123 };

auto x = std::mem_fn(&IntWrapper::GetWrappedInt);
//auto y = std::mem_fn(&IntWrapper::test.GetInt); // ERROR
//auto z = std::mem_fn(&IntWrapper::test.x); // ERROR

int a = x(wrapper);
//int b = y(wrapper);
//int c = z(wrapper);

//std::cin.ignore();

return 0;
}

错误信息如下:

error C2228: left of '.GetInt' must have class/struct/union
error C2672: 'std::mem_fn': no matching overloaded function found
error C3536: 'y': cannot be used before it is initialized
error C2064: term does not evaluate to a function taking 1 arguments

问题:是否有可能进行这些绑定(bind)?为此我需要 std::bind 吗?

最佳答案

根据规范,std::mem_fn()将成员函数指针作为参数,即

auto y = std::mem_fn(&Int::GetInt);
auto b = y(wrapper.test);

据我所知,std::mem_fn() 或多或少已经过时了,因为 lambda expressions .例如

auto y = [](IntWrapper const&wrapper) { return wrapper.test.GetInt(); };
auto b = y(wrapper); // note: no need to get hold of member 'test'

关于c++ - mem_fn 到成员对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44625665/

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