【问题标题】:Invoking method inside of an unknown struct in c++ [closed]在c ++中调用未知结构内的方法[关闭]
【发布时间】:2020-08-27 21:19:58
【问题描述】:

假设用户创建了自己的包含一些代码的结构:

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并在这些元素上执行它的代码。

【问题讨论】:

  • 你能澄清你的最后一段吗? “hack”是什么意思?您共享的代码的哪一部分有问题?
  • 你想在这里达到什么目的?
  • 我试图在运行时从结构“NormalShader”反射调用“main”函数。
  • C++ 中没有反射。

标签: c++ struct function-pointers


【解决方案1】:

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

【讨论】:

  • 我原本希望我可以获取main() 函数的内存地址,然后手动推送、调用和弹出结构。但是,这也可以很好地工作,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2015-03-10
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多