我在一篇文章中发现"static_cast用于非多态类型转换,而dynamic_cast用于多态类型转换".我知道int和double不是多态类型.
但是,我还发现static_cast可以在基类和派生类之间使用.这里的多态类型是什么意思?有人说多态类型意味着具有虚函数的基类.是对的吗?这是唯一的情况吗?还有什么?任何人都可以为我详细说明这个吗?
在C++中,有没有办法查询对象的类型,然后使用该信息动态创建相同类型的新对象?
例如,假设我有一个简单的3类层次结构:
class Base
class Foo : public Base
class Bar : public Base
Run Code Online (Sandbox Code Playgroud)
现在假设我给你一个类型为Base的对象 - 实际上是Foo类型.有没有办法查询类型并使用该信息以后来创建Foo类型的新对象?
我希望能够在一个std::map或一个向量中注册我的类,不要考虑重复等现在,但我不想在类构造函数调用或类的任何函数内注册它,不知何故在课外进行,所以即使我从未实例化它,我也能够知道它存在.
例:
// Somehow, from outside the myclass, in a scope that will be called
//in the begining of the proccess, add "MyClass1" to a
//list so it can be instanciated later
class MyClass1{
}
Run Code Online (Sandbox Code Playgroud)
然后我会做一个#define或如果能够,模板.
我不知道我是否清楚(再次)......我的观点是,我需要知道我所拥有的每一堂课,而不必打电话给他们每一个人.
我的想法是创建一个#define更容易声明类的标头并调用将该特定类注册到列表的东西
可以这样做还是我必须手动映射?
// desirable:
#define CLASSREGISTER(myclass) makethemagic(##myclass); class myclass {
};
Run Code Online (Sandbox Code Playgroud)
我知道,在那个定义中我不能使用继承等...我的观点是试图给出一个我想要以某种方式创建的例子......