【问题标题】:Auto Class Generator自动类生成器
【发布时间】:2018-08-16 04:50:50
【问题描述】:

我最初在这里问过这个问题:Former Question

看来我的要求被误解了。我会尽量让这一切变得清晰和简短:


我正在开发一个解析器,它将自动生成c++ class,如果存在头文件和 cpp 文件的名称,则解析器将分别写出这些文件。如果它们被省略,那么解析器将不会写入任何文件,它将根据从文件中提取的信息自动生成一个类。

我不知道该怎么做:假设我的班级标识符存储在 std::string 中,我如何提取字符串中的文本以将其用作班级名称。例如:

{ 
    std::string className( "Foo" );

    // parser writing class in code
    class className { ....

} 

这是我什至不知道该怎么做的事情。正如我在上一个问题中所述,我更愿意远离macros,但不介意在需要时使用templates 或其他机制。


结论

阅读 cmets 和下面提供的答案后;我最初没有提到的假设实际上被证明是正确的。这是不可能的。我对此表示怀疑,但只是想确认一下。所以这确实让我不得不写出文件以便在运行时创建所需的头文件和/或源文件。

【问题讨论】:

  • 你不能——一个类的名字必须在编译时知道。你的设计错了。
  • @NeilButterworth 我非常理解。但这就是为什么我确实提到了templates,如果它们可以使用的话。
  • 模板也是编译时的东西。您似乎想在运行时创建类,这在 C++ 中是不可能的。
  • 我认为您可以在这里做的最好的事情是生成代码的预构建步骤。几年前,我们使用这样的东西从项目的文件文件夹中构建资源类。
  • 我相信 OP 想要做一些类似于 Perl 的 eval "sub foo { print \"Hi.\"; }"; foo(); 的事情,在运行程序期间定义名称。但是 C++ 没有 eval 这样的东西。

标签: c++ class templates code-generation auto-generate


【解决方案1】:

你不能。

C++ 程序不能自行修改。

如果您想自动生成 C++ 代码,请将其作为构建过程中的预编译步骤。

我自己有一个不错的 Python 脚本,它生成大量 C++ 类(及其随附的样板文件),每个类代表由第三方定义的几种“消息类型”之一。很可爱。

【讨论】:

  • 我自己更经常使用 common-lisp :D
  • @Makketronix:希望它不会传染:)
  • @LRO 不,但会上瘾!
  • 我不确定它是否可以完成(即使使用模板元编程);但我最初的假设是否定的。现在已经完全确认了。谢谢!
  • @FrancisCugler:没问题。
猜你喜欢
  • 2021-09-13
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多