2011-02-08 79 views

回答

3
typeid(type).name(); 
//Or 
typeid(expression).name(); 

将返回一个类型名称。这个特性是“实现定义的”,标准没有说明什么样的函数必须返回,但是在VC++中,它返回你需要的东西(注意g ++名称函数中的具有不同的行为)。

欲了解更多信息,请参阅thisthis链接。

1

typeid可能是你所需要的。

或者你可以使用一些丑陋的定义黑客:

//# is the Stringizing operator 
#define typeof(X) #X 

看到这里的文档/警告:http://msdn.microsoft.com/en-us/library/7e3a913x%28v=VS.100%29.aspx

+1

预处理器解决方案当然只能用于编译时。通用的运行时解决方案是不可能的,因为C++没有反射(你需要像Java或C#这样的托管语言)。 – bjornars 2011-02-08 11:45:48

2

或者像@ badgerr那样使用宏,如果你可以在编译时推论它。如果在运行时需要它,则需要启用RTTI(运行时类型信息)并使用typeid运算符,该运算符返回const type_info&对象,该对象具有name方法。您可以将它与表达式或类型名称一起使用。

class myClass{ 
    // ... 
}; 

int main(void){ 
    myClass myObject; 
    cout << "typeid(myObject).name() = " << typeid(myObject).name() << endl; 
    if (typeid(myObject) == typeid(myClass) { 
     cout << "It's the same type as myClass" << endl; 
    } 
} 

More on typeid

相关问题