2010-02-10 70 views
4

我想传入成员变量的名称。我以为我可以做到这一点传入指定类的成员变量

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

}; 

这显然不工作,但希望得到我想要做的事。我希望能够设置模板类的某个成员变量。

+0

你是否需要像SetVal(“age”,3)那样将名称作为字符串传递? – maxpolk 2010-02-10 03:33:05

+0

在编译时已知该名称,还是在运行时以某种方式得到解决? – 2010-02-10 10:46:00

回答

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