2010-02-10 3 views
4

멤버 변수의 이름을 전달하려고합니다. 내가 할 수있을 거라 생각 했어지정된 클래스의 멤버 변수를 전달합니다.

template <typename T::*> 
void SetVal(T::* newval) 
{ 

}; 

이것은 분명히 작동하지 않지만 잘하면 내가하려는 일에 잘 빠진다. 템플릿 클래스의 특정 멤버 변수를 설정할 수 있어야합니다.

+0

SetVal ("age", 3)에서와 같이 이름을 문자열로 전달해야합니까? – maxpolk

+0

컴파일 타임에 알려진 이름입니까, 아니면 런타임에 어떻게 든 해결됩니까? –

답변

2

항상 컴파일 정의 상수를 템플릿 인수로 사용할 수 있습니다. 그래서 여기에 :

template <typename T, typename R, R T::* member> 
R& SetVal(T& t, const R& value) 
{ 
    t.*member = value; 
    return t.*member; 
} 

struct A 
{ 
    int a; 
}; 

int main() 
{ 
    A a; 
    SetVal<A,int,&A::a>(a, 10); 
    return 0; 
} 
관련 문제