在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);
}

最新更新