gpt4 book ai didi

c++ - 在 C++ 中运行时生成函数指针声明?

转载 作者:行者123 更新时间:2023-11-28 02:53:01 25 4
gpt4 key购买 nike

是否可以创建/生成类似于以下内容的指针声明:

void (*foo)(int, float);

bool (*foo)();

char (*foo)(char, int);

但是直到运行时才知道参数的类型或返回类型。

函数声明将从指定返回和参数类型(如果有)的字符串中读取,然后(如果可能)存储在 C++ 容器中。

可以在运行时(而不是编译时)完成吗?如果需要,也可以使用 C++11。

我真的怀疑这可以用像 C++ 这样的静态类型语言来完成,但如果可以的话,那么有人会使用什么方法。不需要代码(但值得赞赏)只是一些必须使用的指导。

编辑:

在测试了几个想法后,发现它不能(直接)用 C++ 实现。幸运的是我找到了 dyncall允许我在大量平台上(间接)执行此操作的库。

示例函数:

double sqrt(double x);

使用dyncall调用函数:

double r;
DCCallVM* vm = dcNewCallVM(4096);
dcMode(vm, DC_CALL_C_DEFAULT);
dcReset(vm);
dcArgDouble(vm, 4.2373);
r = dcCallDouble(vm, (DCpointer)&sqrt);
dcFree(vm);

字符串也可用于声明函数的结构。

C function prototype                                dyncall signature

void f1(); ")v"
int f2(int, int); "ii)i"
long long f3(void*); "p)L"
void f3(int**); "p)v"
double f4(int, bool, char, double, const char*); "iBcdZ)d"

最佳答案

这取决于您将处理多少类型的参数。从技术上讲 - 您可以用 C++ 做所有事情,只是有时它并不像您希望的那样简单。

您可以使用委托(delegate)模式:

class baseDelegate(){};

template<typename retT, typename paramT>
class delegate: public baseDelegate{
public:
retT (*ptr)(paramtT);
};

vector<baseDelegate*> yourDelegateList;

由于您将主题标记为 C++11,您还可以使用 std::function可变参数模板 等等,让它更容易。上面的代码只是一个例子。

关于c++ - 在 C++ 中运行时生成函数指针声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623716/

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