我有多个课程,所有源自一个基类,现在的一些源类别将不可汇编根据的平台。我有一个类,允许我回一个目的的基本类,但是现在所有名字的派生类已经硬编码。

有没有一种方法来确定什么样的课程已经编制,在运行时最好,这样我就可以去除的联系,而不是提供动态加载的图书馆,而不是。

有帮助吗?

解决方案

你是在寻找C++runtime类登记?我发现这个 链接 (备份).

这将可能完成你想要什么,我不知道有关的动态加载模块,以及是否可以注册他们使用相同的方法。

其他提示

我不知道你是真的想要完成,但是你可以把一个单独的构造中的每一个源类的执行情况的文件,这增加了名为一个名单,以及一个指向一家工厂。然后,该清单总是最新的,并且可以创建的所有编入课程。

一般来说,依靠的运行时间类型的信息是一个坏主意在C++。你有什么描述的似乎是工厂的模式。你可能想要考虑创建一个特别工厂的亚类对每个平台,这将只知道关于类上存在的这一平台。

这听起来像一个地方使用的"编译时间多态性"或模板的政策的参数。

看到现代C++的设计安德烈*Alexandrescu和他 洛基 执行基于本书。也见 洛基 网页在维基百科。

还有讨厌的,编译器的特定的技巧获得在类信息在运行时间。相信我,你不想打开那个可能的蠕虫。

在我看来,唯一的严肃的办法,这样做将使用条件汇编关于各个源类别。内#ifdef块,定义 新的 恒定的,其中包含类的名称正在编制。然后,该名称是仍然很难编码的,但是所有中心位置。

这名称源类必须是硬编码在C++。有没有其他的方式来使用它们。因此,不仅仅是没有办法为自动检测是什么课程已经编制,就不会有的方式使用这些信息如果它的存在。

如果你能指定的课程在运行的时间的基础上他们的名字,是这样的:

std::string foo="Derived1";基*对象=new"foo";//或任何符号你喜欢的-不起作用C++

然后能够告诉我们,如果"Derived1"编制或不将是有益的。因为你有指定的类直接,如:

基*对象=new Derived1;//工作在C++

所有检查是在编制时间。

如果每一类有其自己的动态图书馆,只是检查如果库存在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top