gpt4 book ai didi

c++ - 运行二进制读取得到的 std::function

转载 作者:行者123 更新时间:2023-11-30 02:52:16 28 4
gpt4 key购买 nike

我正在开发一个应用程序,我的想法是将“应用程序”存储在文件中,例如可执行文件。现在我有:AppWriter.c

#include <vector>
#include <time.h>
#include <functional>
struct PROGRAM
{
std::vector<int> RandomStuff;
std::vector<std::function<void()>> Functions;
std::function<void()> MAIN;
} CODED;
void RANDOMFUNC()
{
srand(time(NULL));
for(int i = 0; i < 40; i++)
CODED.RandomStuff.push_back(rand() % 254);
}
void LOGARRAY()
{
for(int i = 0; i < CODED.RandomStuff.size(); i++)
std::cout << "["<< i + 1 <<"]: "<< CODED.RandomStuff[i] << std::endl;
}
void PROGRAMMAIN()
{
std::cout << "Hello i call random function!" << std::endl;
CODED.Functions[0]();
CODED.Functions[1]();
}
void main()
{
CODED.MAIN = PROGRAMMAIN;
CODED.Functions.push_back(RANDOMFUNC);
CODED.Functions.push_back(LOGARRAY);
std::cout << "Testing MAIN" << std::endl;
CODED.MAIN();
FILE *file = fopen("TEST_PROGRAM.TRI","wb+");
fwrite(&CODED,sizeof(CODED),1,file);
fclose(file);
std::cout << "Program writted correctly!" << std::endl;
_sleep(10000);
}

AppReader.c

#include <iostream>
#include <vector>
#include <time.h>
#include <functional>
struct PROGRAM
{
std::vector<int> RandomStuff;
std::vector<std::function<void()>> Functions;
std::function<void()> MAIN;
} DUMPED;
void main()
{
FILE *file = fopen("TEST_PROGRAM.TRI","rb+");
fseek(file,0,SEEK_END);
int program_len = ftell(file);
rewind(file);
fread(&DUMPED,sizeof(PROGRAM),1,file);
std::cout
<< "Function array size: " << DUMPED.Functions.size() << std::endl
<< "Random Stuff Array size: " << DUMPED.RandomStuff.size() << std::endl;
DUMPED.MAIN();
}

当我运行 AppReader 时,函数不起作用(也许为什么 std::function 就像空指针?),但是在数组中或者如果我添加变量,我可以使用调试器看到数据被正确存储(为此我尝试了 vector的功能),但无论什么不起作用都会在功能文件上抛出我的错误。 ¿任何想法我怎么能做到这一点?

最佳答案

这永远行不通。完全没有。曾经。 std::function 是一个复杂的类型。二进制读写不适用于复杂类型。他们永远做不到。您将不得不以预定义的可序列化格式请求函数,例如 LLVM IR。

关于c++ - 运行二进制读取得到的 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com