我有多个类都是从基类派生的,现在某些派生类将不会根据平台进行编译。 我有一个允许我返回基类对象的类,但是现在派生类的所有名称都经过了硬编码。

有一种方法可以确定在运行时最好编译了哪些类,以便我可以删除链接并改为提供可动态加载的库。

===============>>#1 票数:3 已采纳

您是否正在寻找C ++运行时类注册? 我找到了此链接备份 )。

那可能会完成您想要的事情,我不确定动态加载的模块以及是否可以使用相同的方法注册它们。

===============>>#2 票数:2

我不知道您实际上要完成什么,但是您可以在每个派生类的实现文件中放置一个单例构造函数,该构造函数将名称添加到列表以及指向工厂的指针。 然后,列表始终是最新的,并且可以创建所有已编译的类。

===============>>#3 票数:1

通常,在C ++中依靠运行时类型信息是一个坏主意。 您所描述的似乎是工厂模式。 您可能要考虑为每个平台创建一个特殊的工厂子类,该子类仅知道该平台上存在的类。

===============>>#4 票数:0

这听起来像是使用“编译时多态”或模板策略参数的地方。

请参阅Andrei Alexandrescu撰写的Modern C ++ Design及其基于本书的Loki实现。 另请参阅维基百科的Loki页面。

===============>>#5 票数:0

有一些讨厌的,特定于编译器的技巧可以在运行时获取类信息。 相信我,您不想打开那种蠕虫。

在我看来,做到这一点的唯一严肃的方法是在每个派生类上使用条件编译。 在#ifdef块中,定义一个常量,其中包含要编译的类名称。 然后,名称仍然是硬编码的,但都在中央位置。

===============>>#6 票数:0

派生类的名称必须使用C ++进行硬编码。 没有其他方法可以使用它们。 因此,不仅没有办法自动检测已经编译了哪些类,而且还没有办法使用该信息(如果存在)。

如果可以在运行时根据类的名称指定类,则类似于:

std :: string foo =“ Derived1”; Base * object = new“ foo”; //或您喜欢的任何符号-在C ++中不起作用

那么判断“ Derived1”是否已编译的功能将很有用。 由于您必须直接指定类,例如:

基础*对象=新的Derived1; //在C ++中有效

所有检查都在编译时完成。

===============>>#7 票数:-1

如果每个类都有自己的动态库,只需检查该库是否存在。

  ask by X-Istence translate from so

未解决问题?本站智能推荐:

1回复

C ++运行时类切换,依赖于基类继承

我并不精通C ++,而我正在从事的当前项目却遇到了一个小障碍。 我遇到了这个问题: http : //www.terrainformatica.com/2010/08/cpp-how-to-change-class-of-object-in-runtime/,但我不确定这是否是我正在寻找的解决
3回复

在C ++中,是否可以在运行时设置/更改类属性(公共,私有或受保护)?

是否可以在运行时使用C ++语言更改class属性,例如,如下所示: 公共,私有,受保护的属性可以在运行时动态更改吗? 柔软,柔软
2回复

在运行时期间使用'const'参数构造类

这可能是一个简单的问题,但我找不到解决问题的好方法。 我使用的API有一个类,其构造函数需要const double作为其参数,例如: MyClass(const double value); 问题是我想构造一系列实例,但传递的值只能在运行时知道。 更清楚的是,这就是我所做的:
1回复

DirectX11:从类成员函数初始化DirectX时发生运行时错误

我设法建立了一个运行DirectX 11应用程序的工作基础。 但是,在封装代码时,我注意到某些COM指针在放置为protected:时并没有像直观预期的那样运行protected:基类的成员。 在Engine.h中(标题) 作为测试,我只运行DirectX初始化的基本功能:Swa
3回复

初学者C ++:在运行时创建对象而无需知道要创建多少个对象

假设我有一个定义为“ MyClass”的类。 我的“ main”方法将文件名列表作为参数。 每个文件名都是MyClass的配置文件,但是程序用户可以根据需要拥有任意数量的MyClass对象。 如果他们输入2个文件名作为我的main方法的参数,则我希望有2个对象。 如果我知道用户仅限于
3回复

从运行时加载的Dll主程序的调用方法

我有一个(大型而复杂的)C ++程序,它具有自己的类和方法。(显然) 我想在运行时加载一个dll。 从主程序中,我想通过类实例调用dll中的一个函数,该函数将使用此类的方法。 在伪代码中 主程序: 和dll 这有效/可行/正确吗? 编辑: 我知道对
3回复

类构造函数和数组

我正在为一个学校的项目工作,但是我遇到了一些死胡同。 该项目的一部分要求我们有一个使用数组的类。 我们必须使用一个数组(不幸的是我们不能使用向量)。 我试图弄清楚如何在运行时在类中构造一个数组。 最初我不需要实际放置任何东西,我只需要构造函数即可使数组具有一定的大小。 任何反馈或帮助,
6回复

更改类和对象。 (其他aproachs?)

我有几种情况,我想这样做。 这可能是一个例子: 考虑国际象棋游戏的可能实现。 我们定义抽象类'Piece'和从它继承的类:'bishop''peon''塔''马'''女王'等 我们可能会让我们的peon即将到达棋盘的末端,并且可能需要一个调用该peon对象​​的方法来将该对象的类
2回复

Swift Objective-C运行时类命名

我注意到在Objective-c运行时重命名了Swift类。 所以,如果我在swift中有一个名为ViewController的类,当我执行object_getClass(self)时,我的应用程序的名称是TestRuntime ,我自己就是ViewController ,我会得到: _TtC
4回复

Objective C - 在运行时确定类类型

在界面中我有这个: 在运行时我可能希望myPet是一只猫或一只狗,它们是Animal的子类: 显然这是不正确的,但我希望它足以显示我正在尝试做的事情。 这样做的最佳做法是什么?