Ole*_*ann 10 c++ member-pointers
愚蠢的简化代码示例没有做任何有用的事情,而是对数据成员指针的两个后续分配.第一个分配工作,第二个分配给出编译器错误.大概是因为它是一个嵌套的成员.
问题是:是否真的不可能让成员指针指向嵌套成员,或者我错过了任何花哨的语法?
struct Color {
float Red;
float Green;
float Blue; };
struct Material {
float Brightness;
Color DiffuseColor; };
int main() {
float Material::* ParamToAnimate;
ParamToAnimate = &Material::Brightness; // Ok
ParamToAnimate = &Material::DiffuseColor.Red; // Error! *whimper*
return 0; }
Run Code Online (Sandbox Code Playgroud)
ATM我通过使用字节偏移和大量演员来解决.但这很难看,我最好使用那些成员指针.
是的,我知道之前肯定会出现这个问题(几乎与任何问题一样).是的,我事先搜查过但发现没有令人满意的答案.
谢谢你的时间.
我假设您正在尝试获取指向数据库的指针Red.由于这是在结构中定义的Color,因此指针的类型是Color::*.因此,您的代码应该是:
int main() {
float Color::* ParamToAnimate;
ParamToAnimate = &Color::Red;
return 0; }
Run Code Online (Sandbox Code Playgroud)
要使用它,您需要将其绑定到例如的Color实例:
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:是不是可以使动画功能成为模板?例如:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |