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