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; 
} 
Смежные вопросы