c++ - 在c/c++中使用变量作为对象名称的方法

标签 c++ c compiler-construction

出于好奇:有没有办法在 C++ 中使用变量作为对象名称?

大致的内容:

char a[] = "testme\0";
*a *vr = new *a();

如果你要编写一个 C/C++ 编译器,你会如何实现这样的东西?

我知道他们在 zend 引擎中实现了这个功能,但懒得去查找。

也许你们中的一些人可以启发我:)

最佳答案

如果您正在寻找的是这样的东西

<?php
$className = "ClassName";
$instance = new $className();
?>

这在 C++ 中根本不可能。这失败的原因有很多,其中之一是 C++ 在运行时不再了解类的名称(仅在 Debug模式下)。如果有人想编写一个允许这样的编译器,则有必要保留一个C++ 编译器仅在编译和链接期间需要的大量信息。改变这一点将创建一种新的语言。

如果您想根据仅在运行时可用的信息动态创建类,在 C++ 中您很可能会使用 Creational Design Patterns 中的一些.

编辑:

PHP 是一种语言,C++ 是一种非常不同的语言。现在16M可能不算多了,对于一个C++程序员来说,有些程序在k范围内,这就是整个世界了。没有人愿意为他的 C++ 应用程序提供一个完整的编译器,以便能够获得所有动态功能(顺便说一句,据我所知,PHP 也仅以有限的方式实现,如果您想要真正动态的运行时代码创建,请看一下Ruby 或 Python)。 C++(与所有语言一样)有一定的哲学,并且通过字符串中的名称创建对象不太适合它。无论如何,这个功能本身是毫无用处的,并且决不能证明实现它所需的开销是合理的。这很可能在不添加运行时编译的情况下完成,但即使是单独存储名称所需的额外千字节在 C++ 世界中也是没有意义的。而且 C++ 是严格类型的,此功能必须确保类型检查不会中断。

关于c++ - 在c/c++中使用变量作为对象名称的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6927836/

相关文章:

c++ - 客户端和服务器

c++ - 根据 C++ 中动态生成的数字对列表进行排序

c - 使用 cabal 安装 ffmpeg-light

c - C 中的 "UDP datagrams only"套接字

java - 为什么 Javac 不在多核上运行?

c++ - MariaDB C++ 连接器编译

android - 如何在 Android 中使用 dynamic_cast 修复编译错误?

c - 如何在C中创建以用户名作为文件名的.txt?

c++ - 编译器如何编译if语句

performance - 为什么编译器这么蠢?