【发布时间】:2015-01-23 04:24:21
【问题描述】:
所以我想要一个可以有条件地包含为代码或字符串的文件。 像这样:
#define something
#include "myfile.inc"
#undef something
const char myfileasastring =
#include "myfile.inc"
myfile.inc 将是这样的简单代码:
something // anything extra here is fine as long as it goes away in the code include case
int myfunc() { return 23; }
这可能吗?我尝试使用#define something R("mystring 并用它启动 myfile,但这似乎不起作用。
我的具体用例是一个 GLSL 着色器,当在 GL 下运行时,我需要作为字符串传递给 GL 驱动程序,但在软件仿真中运行它时,我想将其编译为 CPP 代码。
我希望这两种情况都使用相同的文件。我知道项目/制作/构建级别的许多解决方法,即使只是剪切和粘贴也不可怕,但如果有一个可移植的编译器级别的方法来做到这一点,那就太好了。
检测到的不是骗子。我知道如何作为一个 xor 包含另一个,但不是作为其中一个或与同一个文件。我也知道如何使用外部工具来做到这一点,我真的只是想知道是否只是简单的、可移植的 c++11。这可能是不可能的。 (尝试再次删除欺骗标签..如果您仍然认为它是欺骗,请发表评论)
【问题讨论】:
-
对不起,骗子问的不是同一个问题。仅包含文本与 R( 作为第一行对我来说效果很好。但是我不能再将它包含为代码!
-
我不认为可以这样做,因为预处理器在处理
#include或任何其他预处理器指令之前对输入进行标记。有一些程序可以将文本文件转换为适当的字符串声明。 -
假设你确实让它工作,你的着色器代码恰好兼容 GLSL 和 C++?
-
乔纳森:是的,我担心。我现在正在使用外部工具。但问以防我错过了什么。
-
BWG:是的,只需要一些结构,#defines,函数,一个带有虚拟主的基类。到目前为止,唯一不起作用的是像 .yx 这样的非常规混合。但是我只是用 vec2(a.y,a.x) 而不是 a.yx.Stuff 来修复 GLSL,比如 .xy 可以通过匿名工会工作。我还必须手动导出名称和指针。例如:RegisterVar ("name", varying, 3, &name)。