首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reflexion Perfect Forwarding与访问者模式

Reflexion Perfect Forwarding与访问者模式
EN

Stack Overflow用户
提问于 2010-11-29 12:18:00
回答 1查看 257关注 0票数 0

http://codepad.org/etWqYnn3

我正在为C++开发某种形式的反射系统,尽管许多人都对此提出了警告。我所看到的是一组接口IScope、IType、IMember、IMonikerClient和一个包含上面所说的CReflexion的包装类。忽略除了成员之外的所有成员,这是我想要做的:

1)实例化包装器

2)确定使用哪种类型

3)实例类型

4)重载()和[],以便在代码中从外部(包装器)访问包含的成员,就像使用std::vector一样简单

我发现使用0x可以为参数转发任何类型的方法调用。但是,我不能动态强制转换,因为强制转换不接受变量(除非有我不知道的方式!)

我将上面的粗略想法联系了起来。我目前正在使用一个switch语句来处理不同的接口。我想,出于显而易见的原因,我想要让它崩溃。我在切换用例中得到了类型匹配错误,这是调用编译方法的原因,在每种情况下,只有三种情况中的一种适用于任何条件,并且抛出编译器错误。

有人能在这里给我提点建议吗?这是除了坚持到变体:/

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2010-11-29 12:38:51

即使在"0x之地“,C++也不会公开创建反射之类的东西所需的信息。

我发现使用0x,我可以为参数转发任何类型的方法调用。

您不能将类型作为参数转发。您可以在成员上转发const-volatile限定符,但这都是在编译时在模板中完成的。当您使用诸如转发之类的东西时,不会执行任何运行时检查。

除非T可以同时转换为int*string*A**,否则运算符()的模板将无法编译。可以将模板看作是一个简单的查找和替换算法,它会为您生成几个函数--在模板实例化时,T的值将被替换为typename,并且该函数会正常编译。

最后,您只能使用dyanmic_cast向下转换类层次结构--在完全不相关的类型A、B和C之间进行转换将无法正确操作。

你最好花时间重新考虑你的设计,这样它就完全不使用反射了。不管怎样,这可能是一个更好的设计,考虑到即使在带有反射的语言中,反射也经常被用来掩盖糟糕的设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4300826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档