http://codepad.org/etWqYnn3
我正在为C++开发某种形式的反射系统,尽管许多人都对此提出了警告。我所看到的是一组接口IScope、IType、IMember、IMonikerClient和一个包含上面所说的CReflexion的包装类。忽略除了成员之外的所有成员,这是我想要做的:
1)实例化包装器
2)确定使用哪种类型
3)实例类型
4)重载()和[],以便在代码中从外部(包装器)访问包含的成员,就像使用std::vector一样简单
我发现使用0x可以为参数转发任何类型的方法调用。但是,我不能动态强制转换,因为强制转换不接受变量(除非有我不知道的方式!)
我将上面的粗略想法联系了起来。我目前正在使用一个switch语句来处理不同的接口。我想,出于显而易见的原因,我想要让它崩溃。我在切换用例中得到了类型匹配错误,这是调用编译方法的原因,在每种情况下,只有三种情况中的一种适用于任何条件,并且抛出编译器错误。
有人能在这里给我提点建议吗?这是除了坚持到变体:/
谢谢!
发布于 2010-11-29 12:38:51
即使在"0x之地“,C++也不会公开创建反射之类的东西所需的信息。
我发现使用0x,我可以为参数转发任何类型的方法调用。
您不能将类型作为参数转发。您可以在成员上转发const-volatile限定符,但这都是在编译时在模板中完成的。当您使用诸如转发之类的东西时,不会执行任何运行时检查。
除非T可以同时转换为int*、string*和A**,否则运算符()的模板将无法编译。可以将模板看作是一个简单的查找和替换算法,它会为您生成几个函数--在模板实例化时,T的值将被替换为typename,并且该函数会正常编译。
最后,您只能使用dyanmic_cast向下转换类层次结构--在完全不相关的类型A、B和C之间进行转换将无法正确操作。
你最好花时间重新考虑你的设计,这样它就完全不使用反射了。不管怎样,这可能是一个更好的设计,考虑到即使在带有反射的语言中,反射也经常被用来掩盖糟糕的设计。
https://stackoverflow.com/questions/4300826
复制相似问题