2015-10-28 20 views
2

我試圖得到一個字符串報告沒有裝飾窗戶上沒有成功可言類類型(Visual Studio 2010中)。的boost ::核心::視覺工作室typeid的還原函數()。名稱

由於UnDecorateName不起作用我正在使用boost庫。

#include <typeinfo> 
#include <boost/core/demangle.hpp> 

class MyObject{}; 

int main (int argc, char ** argv) 
{ 
    MyObject o; 
    const char * str = typeid(o).name(); // str = "class MyObject" 
    std::string dstr = boost::core::demangle(str); // dstr = "class MyObject" 

    return 0; 
} 

我怎樣才能從上面的代碼只得到「MyObject」作爲輸出字符串? 現在我不能使用C++ 11方法。

+1

如何對一些簡單的字符串操作(即刪除前6個字符)? –

+0

它不適用於所有情況。例如:int *。 – mrgiov

+1

看看關鍵字類/結構/聯合/枚舉從字符串中刪除它們。 –

回答

1

UPDATE可悲的是這個庫使用引擎蓋下相同的底層API demangling:看到評論由@cv_and_he

你可以嘗試新的TypeIndex庫:

Live On Coliru

#include <boost/type_index.hpp> 
#include <iostream> 

class MyObject { public: virtual ~MyObject() {} }; 
struct Derived : MyObject {}; 

int main() { 
    MyObject o; 
    Derived d; 

    std::cout << boost::typeindex::type_id<MyObject>().pretty_name() << "\n"; 
    std::cout << boost::typeindex::type_id<Derived>().pretty_name() << "\n"; 

    MyObject& r = d; 
    std::cout << boost::typeindex::type_id_runtime(r).pretty_name() << "\n"; 
} 

打印

MyObject 
Derived 
Derived 

在我的編譯器

+0

http://rextester.com/AEBX25187 – llonesmiz

+0

很酷。我不知道有任何升壓功能的在線編譯器 – sehe

+0

編輯:好的在線工具 – mrgiov