2012-01-29 2 views
1

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

... – Pablo

답변

3

예, 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

+0

는'mem_fn'은 무엇입니까? –

+0

@ Mr.Anubis : http://en.cppreference.com/w/cpp/utility/functional/mem_fn – kennytm

+0

감사합니다. 그러나 그것을 저장하는 데 어떤 형식을 사용해야합니까? (당신은 자동을 사용하고 있습니다, 나는 그것을 멤버 변수로 저장해야합니다.) 함수 <...>을 사용할 수 있습니까? 그렇다면 올바른 타입 매개 변수는 무엇입니까? –