【发布时间】: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