C++ 如何创建可以在c+中指定任何类型的对象+;
我有这样一个类定义:C++ 如何创建可以在c+中指定任何类型的对象+;,c++,C++,我有这样一个类定义: class Paint{ AnyType* Color; }; 我想做的是创建一个类(AnyType),它的对象可以被分配给任何类类型的任何对象。像这样: class Blue{}; class Green {};` Paint MyPaint; MyPaint.Color = new Green(); // color gets changed MyPaint.Color = new Blue(); 如何声明任何类型 Class AnyType{ //class
class Paint{
AnyType* Color;
};
我想做的是创建一个类(AnyType),它的对象可以被分配给任何类类型的任何对象。像这样:
class Blue{};
class Green {};`
Paint MyPaint;
MyPaint.Color = new Green();
// color gets changed
MyPaint.Color = new Blue();
如何声明任何类型
Class AnyType{
//class definition
};
纯C++标准的方式做这件事,会是来回的。但是,这将要求您知道稍后要强制转换的正确类型
如果您对第三方解决方案持开放态度,则这是一个此类应用程序尽管如此,像这样的事情很少是个好主意。通常会有更好的设计来解决您的问题。坦率地说,当有人想做这样的事情时,这是一个问题,而他们的实际问题可以用更健壮的方式来解决。 < P>纯粹的C++标准的方式来做这件事,会是来回的。但是,这将要求您知道稍后要强制转换的正确类型
class Paint{
BaseColor* Color;
};
class BaseColor {}
class Blue : BaseColor {};
class Green : BaseColor {};`
Paint MyPaint;
MyPaint.Color = new Green();
// color gets changed
MyPaint.Color = new Blue();
如果您对第三方解决方案持开放态度,则这是一个此类应用程序
尽管如此,像这样的事情很少是个好主意。通常会有更好的设计来解决您的问题。坦率地说,当有人想做这样的事情时,这是一个非常困难的问题,他们的实际问题可以以更可靠的方式解决。您的
Color
成员可能应该是某种ColorType
类型。类绿色
和蓝色
应派生自颜色类型
class Paint{
BaseColor* Color;
};
class BaseColor {}
class Blue : BaseColor {};
class Green : BaseColor {};`
Paint MyPaint;
MyPaint.Color = new Green();
// color gets changed
MyPaint.Color = new Blue();
请参阅rbaghbanli的代码,该代码正是这样做的(接受答案)
然后,您可以将Green和Blue类共享的所有方面放入ColorType,这非常有用
如果你使用了一个代码>空* */COD>或<代码> Boo::任何< /代码>,你不能真正用这个指针做什么,因为C++忘记了它实际指向的是什么。
背景:C++是完全静态类型的,不允许自省。唯一可用的运行时机制是虚拟函数,这种机制非常有限
如果你真的需要任何类型的东西,你必须自己写。但我想你真的不需要这个。我认为您需要<代码>可以是任何类型。,这在C++中是通过派生得到的充分支持。 < p>您的<代码>颜色< /代码>成员应该可能是一些<代码> CopyType < /C>类型。类
绿色
和蓝色
应派生自颜色类型
请参阅rbaghbanli的代码,该代码正是这样做的(接受答案)
然后,您可以将Green和Blue类共享的所有方面放入ColorType,这非常有用
如果你使用了一个代码>空* */COD>或<代码> Boo::任何< /代码>,你不能真正用这个指针做什么,因为C++忘记了它实际指向的是什么。
背景:C++是完全静态类型的,不允许自省。唯一可用的运行时机制是虚拟函数,这种机制非常有限
如果你真的需要任何类型的东西,你必须自己写。但我想你真的不需要这个。我认为你需要<代码>可以是任何类型的。< /代码>这在C++中通过派生得到了足够的支持。所以你想要一个<代码>空洞*/Cuth>?照所问的问题的答案是<代码> Value*/Cord>。但是,问题似乎没有正确地识别出这个需求。相反,我认为您确实希望
Green
和Blue
派生自一些常见的基类型。@JSF同意。我只是不确定他们是想要彩色对象还是任何可能的对象。所以你想要一个void*
?问题的答案是void*
,但问题似乎没有正确识别需求。相反,我认为您确实希望Green
和Blue
派生自一些常见的基类型。@JSF同意。我只是不确定他们是想要颜色对象还是任何可能的对象。你能告诉我如何声明一个可以是任何类型的变量吗?我没有写“可以是任何类型的”。我写过“可以是任何一种”,例如,“可以是任何颜色”。请看接受的答案,这说明了如何做到这一点。你能告诉我如何声明可以是任何类型的变量吗?我没有写“可以是任何类型的”。我写过“可以是任何一种”,例如,“可以是任何颜色”。请参阅已接受的答案,这说明了如何执行此操作。