编译程序后我必须使用头文件。由于客户请求,此标头从服务器下载。在标题内部有3个数组和1个int,我想在执行期间读取它。
我的第一个解决方案是编写一个解析器。头文件总是具有相同的模式,所以我可以编写4行来读取数组和int。
还有其他解决方案吗?很可能是一个动态包含和一个预编译的头,ho知道。
这是完整的解释:
我正在使用Qualcomm AR SDK开发原生Android应用程序。
使用您自己的3D模型的一种技巧是使用此perl脚本:http://heikobehrens.net/2009/08/27/obj2opengl/。基本上你需要2个文件:带有顶点,法线和纹理坐标的标题以及纹理。上面的脚本可以从.obj文件中生成此标头。
好的,现在您已准备好在本机C / C ++中使用这两个文件来呈现模型。您可以编译此标题并将其包含在应用程序中的任何位置。但是,例如,当用户按下按钮时,我的应用程序需要下载此标题和纹理。纹理很容易阅读,但我还需要在执行时读取标题。因为我不是C / C ++专家,所以我在这里询问是否有机会在执行时链接标题。
但现在没关系,因为我已经编写了一个解析器,所以我可以在执行时使用顶点,纹理坐标和法线。
答案 0 :(得分:8)
C ++(通常)是静态编译的语言。你编译它,并获得一些可执行代码,你可以运行。编译前后的两个阶段与彼此无关。在编译时,您只处理C ++源代码 。
在运行时,您将处理从所有源代码生成的单个编译程序。
编译后,通常无法将“源代码”添加到程序中。
(我在这里简化了一点,我希望这些挑剔的人会原谅我)
您需要做的是将“标题”视为数据,而不是代码。
这是一个包含三个数组和一个int的数据文件。您需要编写程序来打开该文件,读取其内容,解析它并执行必要的操作。
要做到这一点,你需要查看文件I / O来加载文件,字符串操作来处理它的内容,然后是一些逻辑来创建变量来保存数据文件中指定的数据。
但你不能只是“插入”新代码。
答案 1 :(得分:3)
不,你必须写一个解析器。有些语言可以在运行时合并新代码,但C ++不是其中之一。
答案 2 :(得分:3)
为了补充jalf的答案(现在问题已被重新打开...谢谢)如果你的目标是使用标头中的常量值,作为配置文件,实现一些简单的正则表达式解析器就足够了。
确保您需要使用常量修改的变量实际上是变量,而不是常量本身,或者您无法在运行时修改它们。
即。如果要从config.h读取MAX_FILES,请不要使用默认的#define MAX_FILES 255或const int MAX_FILES = 255进行编译。使用“int maxFiles = 255”,然后在运行时使用您的配置值覆盖它。
如果我误解了,道歉,希望这有帮助。
答案 3 :(得分:-1)
听起来您正在尝试使用配置文件。您是否可以控制服务器上文件的格式?如果是这样,这里最简单的方法是以xml等标准格式编写配置文件,然后使用像rapidXML这样的库来解析配置文件(
)使用标准格式的好处在于,如果您决定稍后更改配置文件格式,请添加它等等。对您的代码进行相对简单的更新以解析更新的文件。通常比重写自定义解析器的工作少。
如果您无法控制服务器文件的外观,并且它们不是JSON,XML,YAML等标准格式,则必须编写自己的自定义解析器。听起来这是一个相对简单的文件,所以这不应该太难了。