- PR -

C++/CLIでクラスの比較やインターフェースを実装しているかを知る方法

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2007-02-03 17:10
こんちは。

JavaやVB.NET、C#などのオブジェクト指向言語をやっていると、オブジェクトの
クラスの型チェックやインターフェースを実装しているかをチェックすることが
よくあります。

最近、C++/CLIをやり始めたのですが、そのような機能が言語仕様としてないよう
です。
http://blogs.wankuma.com/ogiogi/archive/2006/09/22/39332.aspx

どのようにすればいいのでしょうか?

基本になるObjectクラスにはGetTypeメソッドが実装してあり、これでクラス名が
取れるので、これを比較してできなくはなさそうですが・・・。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-03 19:30
引用:

maruさんの書き込み (2007-02-03 17:10) より:

基本になるObjectクラスにはGetTypeメソッドが実装してあり、これでクラス名が
取れるので、これを比較してできなくはなさそうですが・・・。


クラス名で比較するのは止められた方が良いです。

お知りになりたいのは、typeid 演算子でしょうか?
GetType メソッドではインスタンスが必要ですが、typeid 演算子ではインスタンスは必要ないです。

ということは...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-02-03 21:35
http://vene.wankuma.com/ecma372/15_expression.aspx#SS.15.3.7

typeidですね。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-02-05 00:44
RTTI(実行時型情報)で検索すると、幸せになると思うよ。

C++(CLIじゃなくても使える)の標準機能だけど、デフォルトで無効になっているのは、それなりにデメリットが多いから。なので本当に必要なのかよく考えてから使ったほうが良い。その機能を必要とするクラスが一部に限られるなら、クラスの名称を取得するようなインターフェースクラスを作るほうがオーバーヘッドは少ない。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2007-02-05 11:39
おはようございます。
ありがとうございました。解決しました。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-02-05 13:03
引用:

maruさんの書き込み (2007-02-05 11:39) より:
おはようございます。
ありがとうございました。解決しました。


どうやって解決したの?
ぜんぜんわかんないんだけど?
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2007-02-06 18:49
こんにちは。
皆さんがご指摘のように、typeidを使って解決したのですが・・・。
さらに言うならtypeidのIsInstanceOfTypeを使ったのです。
1

スキルアップ/キャリアアップ(JOB@IT)