Profile

書いてる人:

たけ-ちーず
紹介文:
SkypeID:take-cheeze

Link

RSS Feed

Search

Calender

Latest Article

Category

Access Counter

Online Counter

Show All Article

どうでもいい独り言。 と、少しの開発日記。
  • 11 «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • » 01
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【--/--/-- --:--】 | スポンサー広告 |
デマングルしてみました。
先日、言っていたデマングルを実験してみました。

↓のサイトを一通り参考にしました。

http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html
http://www.ib.cnea.gov.ar/~oop/biblio/libstdc++/namespaceabi.html
http://docs.sun.com/app/docs/doc/802-5747-03/6i9g1bga6



因みに、今回は abi::__cxa_demangle() を使いました。

それから、使用したコンパイラは↓です。
Windows向けには、やや限定的かもしれません。

g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



そして、実験用のコードが追記にあったりするので、誰かの参考になれば幸いです。

それでは、お休みなさい。


追伸的な、拍手回答。

> sputnikさん
誰しも向き不向きがあると思いますから、気にする必要は無いですよ。


↓、件の実験コードです。

#include <iostream>
#include <string>
#include <typeinfo>
#include <vector>

#include <cxxabi.h>
#include <stdlib.h>

using namespace std;

string demangleTypeInfo(const type_info& info)
{
int status;
char* readable = abi::__cxa_demangle( info.name(), 0, 0, &status );
// errors
if(readable) throw "Demangling failed.";
switch(status) {
case -1: throw "Memory error.";
case -2: throw "Invalid name.";
case -3: throw "Argument was invalid";
default: break;
}
// char* to string
string ret(readable);
free(readable);

return ret;
}
template< typename T >
string demangle(T& src)
{
return demangleTypeInfo( typeid(src) );
}
template< typename T >
string demangle()
{
return demangleTypeInfo( typeid(T) );
}

int main()
{
cout
<< typeid(string).name() << endl
<< demangle< string >() << endl;

vector< string > vec;

cout
<< typeid(vec).name() << endl
<< demangle(vec) << endl;

return EXIT_SUCCESS;
}

【2010/02/02 23:05】 | 雑記 | トラックバック(0) | コメント(0) |
<<関係ない話。 | HOME | 終わり以外、すべてよし。>>
コメント
コメントの投稿












管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://takecheeze.blog47.fc2.com/tb.php/267-3102b563
この記事にトラックバックする(FC2ブログユーザー)
ホーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。