Nested data member pointer - not possible?
AFAIK, this is not possible. A pointer-to-member can only be formed by an expression of type &qualified_id
, which is not your case.
Vite Falcon's solution is probably the most appropriate.
I assume you are trying to get the pointer to the datamember Red
. Since this is defined in the struct Color
the type of the pointer is Color::*
. Hence your code should be:
int main() {
float Color::* ParamToAnimate;
ParamToAnimate = &Color::Red;
return 0; }
To use it, you need to bind it to an instance of Color
for example:
void f(Color* p, float Color::* pParam)
{
p->*pParam = 10.0;
}
int main() {
float Color::* ParamToAnimate;
ParamToAnimate = &Color::Red;
Material m;
f(&m.DiffuseColor, ParamToAnimate);
return 0;
}
EDIT: Is it not possible to make the animation function a template? For example:
template<class T>
void f(T* p, float T::* pParam)
{
p->*pParam = 10.0;
}
int main() {
Material m;
f(&m.DiffuseColor, &Color::Red);
f(&m, &Material::Brightness);
return 0;
}