题
我有多个课程,所有源自一个基类,现在的一些源类别将不可汇编根据的平台。我有一个类,允许我回一个目的的基本类,但是现在所有名字的派生类已经硬编码。
有没有一种方法来确定什么样的课程已经编制,在运行时最好,这样我就可以去除的联系,而不是提供动态加载的图书馆,而不是。
其他提示
我不知道你是真的想要完成,但是你可以把一个单独的构造中的每一个源类的执行情况的文件,这增加了名为一个名单,以及一个指向一家工厂。然后,该清单总是最新的,并且可以创建的所有编入课程。
一般来说,依靠的运行时间类型的信息是一个坏主意在C++。你有什么描述的似乎是工厂的模式。你可能想要考虑创建一个特别工厂的亚类对每个平台,这将只知道关于类上存在的这一平台。
还有讨厌的,编译器的特定的技巧获得在类信息在运行时间。相信我,你不想打开那个可能的蠕虫。
在我看来,唯一的严肃的办法,这样做将使用条件汇编关于各个源类别。内#ifdef块,定义 新的 恒定的,其中包含类的名称正在编制。然后,该名称是仍然很难编码的,但是所有中心位置。
这名称源类必须是硬编码在C++。有没有其他的方式来使用它们。因此,不仅仅是没有办法为自动检测是什么课程已经编制,就不会有的方式使用这些信息如果它的存在。
如果你能指定的课程在运行的时间的基础上他们的名字,是这样的:
std::string foo="Derived1";基*对象=new"foo";//或任何符号你喜欢的-不起作用C++
然后能够告诉我们,如果"Derived1"编制或不将是有益的。因为你有指定的类直接,如:
基*对象=new Derived1;//工作在C++
所有检查是在编制时间。
如果每一类有其自己的动态图书馆,只是检查如果库存在。
不隶属于 StackOverflow