我将我在java/as3中创建的网络api移植到C++。我对C++很陌生,所以我不熟悉所有可用的工具。调用一个未知的构造函数(替代反射)C++
我有一个叫Packet的类。在我的java/as3类中,数据包有2个hashmaps,一个用于classToId,另一个用于idToClass。
然后我注册一个带有id和它的类对象的派生包。
当收到一个包时,我得到它的包ID,然后用这个ID创建一个新的包。
在AS3代码然后我用:
public static function getNewPacket(id:int):Packet
{
try
{
var clazz:Class = getClassById[id];
return (clazz == null ? null : Packet(new clazz()));
}
catch (e:Error)
{
trace("Skipping packet with id " + id + ": " + e.message);
}
return null;
}
正如你所看到的,使用反射调用构造函数。然而,在c + +中,我不知道如何创建这个。 我不能使用静态数据包列表,因为这是一个API类(所以这个类会在使用这个API的应用程序中扩展)
底线 - C++中没有'reflection'。你需要考虑“在Java框外”来提出一个解决方案。 – PaulMcKenzie 2015-02-07 23:58:27
这就是为什么我问这个问题,我不知道可用来替代反射的工具。 – Duckdoom5 2015-02-08 00:00:48
可以存储在'getClassById'映射中的'Class's有什么约束?他们可以是任何具有无参数构造函数的类,还是需要成为某个基类的子类 - 它是在您的应用中定义的基类还是其他类?还是有一个可接受的类的简短列表? – ajb 2015-02-08 00:01:38