2011-05-12 327 views
3

如何獲取以下typeidT& object;其中T是:template<class T>。我正在使用C++代碼。我做了測試:C++如何獲取對象的類型?

const std::type_info& ObjT= typeid(object); 
std::cout<<"******the objT is: "<<&ObjT<<std::endl; 

但它崩潰了。爲什麼?

+0

它在運行時崩潰,還是無法編譯? – 2011-05-12 14:13:34

回答

3

是否包含:

#include <typeinfo> 

,也許你應該送

std::cout << typeid(object).name() << std::endl; 

也許有一個事實的問題,你是在對象上做& &。

看看例子here

+0

以及如何在ObjT中保存類型?是的,我包括庫typeinfo – 2011-05-12 14:15:42

+0

我做了檢查,但它仍然不打印typeid :(。爲什麼? – 2011-05-12 14:16:45

+0

@JustMe:你不是真的保存typeinfo,你保存一個引用,如果你想保存它你應該刪除&'s。 – 2011-05-12 14:17:45

4

如果你想要一個人類可讀的名稱,使用方法name()

std::cout<<"******the objT is: "<<ObjT.name()<<std::endl; 
0

這是你在做什麼?

#include <typeinfo> 
#include <iostream> 

template <typename T> 
struct S { 
}; 

int main() { 
    S <int> a; 
    S <int> & object = a; 
    const std::type_info & ObjT = typeid(object); 
    std::cout << "******the objT is: "<< ObjT.name() << std::endl; 
} 

這適用於我與GCC 4.5.1。

+0

這將肯定會編譯,但我真的懷疑它做的是什麼OP想要的 - 你正在打印'type_info'對象的地址 – Cascabel 2011-05-12 14:21:20

+0

@Jefromi這是什麼OP似乎想從他的代碼中得到 – 2011-05-12 14:23:53

+1

我認爲我們可以從OP的代碼中推斷出的主要原因是他們不知道如何編寫他們真正想要的代碼。 – Cascabel 2011-05-12 14:24:41