【问题标题】:Can you do file IO in c++ metaprogramming?你能在 C++ 元编程中做文件 IO 吗?
【发布时间】:2014-05-27 23:43:53
【问题描述】:

实际上,我认为这不是一个好习惯。但是因为 c++ 元编程是图灵完备的,所以为了完整起见,我一直在研究这个。在生产中我不会使用它,但为了好玩,我想在编译时做一些文件 IO。任何人都知道如何在编译时使用元编程来做文件 IO?也相当于在编译时使用 C++ 使用元编程的酷运行脚本?

【问题讨论】:

  • 如果有帮助,实例化模板有点像将定义输出到源文件。这算不算?
  • #includeing 文件是否算作 I/O?
  • 顺便说一句,图灵完备并不意味着你可以做 IO。
  • 也许#include 在写方向。这是简单的阅读,也许使用它可以说解析 json。但是 include 指令不能作为模板的输入。
  • 幸运的是,这不可能,C++ TMP 已经被滥用得够多了,如果可以进行文件 IO,那么这整个组合将被用于更不合适的东西。

标签: c++ templates io metaprogramming template-meta-programming


【解决方案1】:

答案是否定的,你不能。不是普通意义上的。

但是,从好的方面来说,文件 I/O 不是图灵完整性的要求,实际上也不是任何编程语言定义的要求。从编程语言文件的角度来看,I/O 只是意外数据的来源,或者是发送不再需要的位的地方,或者是语言某些部分之间的有趣连接,其中一次存放的位可以在另一个。

因此在某种抽象级别上,编译器的内部存储可以被视为一个存储库(或文件系统),它预先加载了程序的源代码和许多符号。元编程脚本可以在这个存储库上进行交互(执行 I/O),接受输入代码和符号并发出生成的代码和符号,其中一些是它之前生成的。

但答案仍然是否定的。没有文件 I/O。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多