【发布时间】:2012-04-10 14:38:25
【问题描述】:
假设我有一个类 Handler,它带有一些子类,如 stringhandler、SomeTypeHandler、AnotherTypeHandler。类 Handler 将方法“handle”定义为所有子类的公共接口。对于不同的处理程序,“处理”的逻辑当然是完全不同的。
所以我需要做的就是将任何值传递给 handle 方法。然后,特定的类可以将“任何东西”转换为他们期望的类型。
基本上我需要的是 java 类 Object :D 之类的东西
我尝试的第一件事是void*,但显然你不能做到B* someB = dynamic_cast<B*>(theVoidPointer),所以没有运气。
我的第二个想法是使用boost::any。但是,使用 boost::any 的要求是该值必须是可复制的,而我的数据并非如此。
有什么想法可以让它发挥作用吗?
谢谢
编辑:请注意,我知道我可以使用没有成员的 SomeData 类,并让我的数据成为它的子类,但我正在寻找一种更通用的方法,它不需要我制作自己的包装类.
【问题讨论】:
-
您确定需要
dynamic_cast,而不能使用reinterpret_cast? -
看起来你的大部分选项都在这里描述:stackoverflow.com/questions/913505/…
-
你也可以使用 boost::any 来存储指针,所以处理的类型不需要是可复制构造的
-
我认为你应该退后一步,告诉我们你想要完成什么,而不是你对如何实现它的想法。在我看来,你基本上是带着一个可能在 Java 中可行的想法而陷入困境,但这是对 C++ 的可怕滥用(老实说,总体而言,这是一种可怕的 OO,但 Java 接受了这种想法)。
-
后退,后退,后退。 Upcast 通常是糟糕设计的标志。类型转换(在开放集上)通常是糟糕设计的标志。