[这个问题的后续内容:可以在C ++中给出它的类型来实例化对象吗?
在Java中,您可以使用类型为Class的方法参数,并且调用者可以传入Foo.class。我不考虑这方面的反思,虽然你可以用传入的类做什么显然是。 C ++有没有传递“类型”的机制?因为我知道我用传入类型做的很少/没有,我怀疑答案是“不”。
显然,模板提供了这种功能,但它们并不是我想要的。
答案 0 :(得分:3)
听起来像RTTI(运行时类型识别)就是你要找的东西。来自http://en.wikibooks.org/wiki/C++_Programming/RTTI:
用于确定的typeid运算符 运行时对象的类。它 返回对a的引用 std :: type_info对象,它存在 直到该计划结束,那 描述了“对象”。
答案 1 :(得分:0)
没有。此功能是“反射”的一部分,只能在Java等语言中实现,它实际上将有关类的信息放入已编译的二进制文件中。
C ++(通常)实际上并不在结果二进制文件中存储有关类的任何信息。 (除了std::type_info
工作所需的几个位)
实际上,没有像Java和朋友在C ++中提供的“类型”那样,因此你无法将它传递给方法。
如果你想将一个类型传递给一个方法来实例化它,你实际上可以用更好的方式做到这一点(这也适用于Java和朋友)
#include <memory>
struct IMyType
{
virtual ~IMyType();
virtual MyMethod();
};
struct IElementFactory
{
virtual std::auto_ptr<IMyType> GetNewItem() const = 0;
virtual ~IElementFactory();
};
void MyMethodThatAcceptsAType(const IElementFactory& factory)
{
std::auto_ptr<IMyType> instance(factory.GetNewItem());
//Use your instance like normal.
}
即使在Java领域也是如此,因为这段代码可以保持类型安全,而基于反射的代码则不然。
答案 2 :(得分:0)