在c ++中的未知结构内部调用方法
Invoking method inside of an unknown struct in c++
假设用户创建了自己的包含一些代码的结构:
struct NormalShader
{
vec3 normal;
vec3 color;
void main()
{
color = normal * 127.5f + 127.f;
}
};
然后主要代码运行并尝试模拟这个结构:
void ShaderRun()
{
void* structData = alloca(structSize);
LoadAttributes(structData);
Invokemain(structData); //<- Pseudocode here that executes main() with the structs data at the 'structData' pointer
}
所以我的问题是:是否可以手动初始化一个未知结构,然后以某种方式破解其成员函数以使其处理自己的数据,而无需直接访问所述结构。
编辑:
澄清一下:通过 hack,我的意思是强制 NormalShader
中的 main
函数认为它的结构元素是 structData
并在这些元素上执行它的代码。
使Invokemain()
接受一个模板参数,调用者可以使用它来指定传入的结构类型,例如:
template <typename T>
void Invokemain(T &data)
{
data.main();
}
然后调用者可以分配它需要的任何结构,例如:
struct NormalShader
{
vec3 normal;
vec3 color;
void main()
{
color = normal * 127.5f + 127.f;
}
};
void ShaderRun()
{
NormalShader data;
...
Invokemain(data);
}
假设用户创建了自己的包含一些代码的结构:
struct NormalShader
{
vec3 normal;
vec3 color;
void main()
{
color = normal * 127.5f + 127.f;
}
};
然后主要代码运行并尝试模拟这个结构:
void ShaderRun()
{
void* structData = alloca(structSize);
LoadAttributes(structData);
Invokemain(structData); //<- Pseudocode here that executes main() with the structs data at the 'structData' pointer
}
所以我的问题是:是否可以手动初始化一个未知结构,然后以某种方式破解其成员函数以使其处理自己的数据,而无需直接访问所述结构。
编辑:
澄清一下:通过 hack,我的意思是强制 NormalShader
中的 main
函数认为它的结构元素是 structData
并在这些元素上执行它的代码。
使Invokemain()
接受一个模板参数,调用者可以使用它来指定传入的结构类型,例如:
template <typename T>
void Invokemain(T &data)
{
data.main();
}
然后调用者可以分配它需要的任何结构,例如:
struct NormalShader
{
vec3 normal;
vec3 color;
void main()
{
color = normal * 127.5f + 127.f;
}
};
void ShaderRun()
{
NormalShader data;
...
Invokemain(data);
}