C++ 成员变量包装器

C++ 成员变量包装器,c++,c++11,C++,C++11,可以使用std::mem_fn存储和包装成员函数 在C语言中,可以对成员变量使用offsetof(…)来粗略地包装成员变量(但仅限于某些类型的变量) 可以在C++中包成员变量吗?最干净的方法是什么 即 X类 { ... M M; ... }; mem_var xm=&X::m; int main() { X=。。。; M i=。。。; xm(x)=i;//与x.m=i相同 是的,你可以用…std::mem\u fn来做 struct B { int x; int y; }; i

可以使用std::mem_fn存储和包装成员函数

在C语言中,可以对成员变量使用offsetof(…)来粗略地包装成员变量(但仅限于某些类型的变量)

<>可以在C++中包成员变量吗?最干净的方法是什么

X类
{
...
M M;
...
};
mem_var xm=&X::m;
int main()
{
X=。。。;
M i=。。。;
xm(x)=i;//与x.m=i相同

是的,你可以用…
std::mem\u 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;
}

演示:

如果我们有多态lambda…谢谢,但是我应该使用什么类型来存储它?(您使用的是auto,我需要将它存储为成员变量)我可以使用function来存储它吗?如果可以,它的正确类型参数是什么?解决了:将示例中的“auto”替换为“std::function”@user1131467:您还可以使用
decltype(std::mem\u fn(&B::y))
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;
}