假设用户创建自己的结构,其中包含一些代码:
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);
}