c++ 使用std::mem_fn为数据成员创建可调用的 Package 器

nc1teljy  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(121)

可以用std::mem_fn存储和 Package 成员函数吗?
在C中,可以在数据成员上使用offsetof(...)来粗略地 Package 它(但仅适用于某些类型)。在C++中可以 Package 数据成员吗?最干净的方法是什么?
例如:

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
}
s3fp2yjn

s3fp2yjn1#

是的,你可以用... 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

相关问题