c++ - 动态引用头变量c++

标签 c++ variables header-files

我知道 C++ 不能在运行时创建变量。一切都必须在编译时声明。

我的问题是,比方说,如果我有 10 个包含简单变量名的头文件,我可以通过头文件名或类似名称动态引用它们吗?

例如,如果我有两个头文件,一个名为“myVars1.h”,变量为“myVars1name”,另一个名为“myVars2.h”,变量为“myVars2name”,我可以做类似的事情吗

int fileNum = 1;
string name = ["myVars" + fileNum + "name]; //i wish this worked...

这是否与在运行时创建变量相同(因此是非法的)?

谢谢

最佳答案

假设这些变量在头文件中声明,并在其他地方定义为全局变量,您可以使用 dlsym() 得到您想要的。基本上C/C++不能在运行时定义变量,但是可以在运行时加载。

前提:这些变量必须内置到共享库中,例如mylib.so

....
int fileNum = 1;
string name = ["myVars" + fileNum + "name]; //i wish this worked...

void *handle = dlopen("$PATH/mylib.so", RTLD_LAZY);
void *varPtr = dlsym(handle, name);  // Your wish comes true here...
//cast varPtr to its target type.
....

关于c++ - 动态引用头变量c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637946/

相关文章:

c++ - CUDA fmod - 不允许从 __global__ 函数调用 __host__ 函数

c - 在 mac osx 上找不到 endian.h

php - 变量内的 Smarty 模板变量

c++ - 在 C++ 程序中包含 C 头文件

c++ - 在 C++ 中使用 C header 而不是其 C++ 等价物(例如 stdio.h 而不是 cstdio)是不好的做法吗?

c++ - Haskell IO monad 的 C/C++ 包装器

c++ - 由于错误的转换导致不正确的重载/特化

c++ - Visual Studio 吐出 .lib 而不是 .dll

java - 检查两个整数输入是否在范围内-Java

javascript - 在 html 文档的开头声明变量