可以使用std :: mem_fn存储和包装成员函数。
在C中,您可以在成员变量上使用offsetof(...)来粗略地包装成员变量(但仅限于某些类型)。
是否可以在C ++中包装成员变量?什么是最干净的方式?
即
class X
{
...
M m;
...
};
mem_var<M> xm = &X::m;
int main()
{
X x = ...;
M i = ...;
xm(x) = i; // same as x.m = i
cout << xm(x); // same as cout << x.m
}
答案 0 :(得分:2)
是的,您可以使用... std::mem_fn
。
struct B
{
int x;
int y;
};
int main()
{
auto m = std::mem_fn(&B::y);
B b {0, 0};
m(b) = 4;
printf("%d %d\n", b.x, b.y); // prints 0 4
printf("%d\n", m(b)); // prints 4
return 0;
}