成员变量包装

时间:2012-01-29 11:58:40

标签: c++ c++11

可以使用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
}

1 个答案:

答案 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;
}

演示:http://ideone.com/40nI2