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同意。我只是不确定他们是想要颜色对象还是任何可能的对象。你能告诉我如何声明一个可以是任何类型的变量吗?我没有写“可以是任何类型的”。我写过“可以是任何一种”,例如,“可以是任何颜色”。请看接受的答案,这说明了如何做到这一点。你能告诉我如何声明可以是任何类型的变量吗?我没有写“可以是任何类型的”。我写过“可以是任何一种”,例如,“可以是任何颜色”。请参阅已接受的答案,这说明了如何执行此操作。