2010-02-10 64 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; 
}