is演算子について – プログラミング – Home

通知
すべてクリア

[解決済] is演算子について


human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

お世話になります。

現在、C#からC++/CLIへコード変換をおこなっているのですが

C#のis演算子をC++/CLIでどのように記述したらよいか悩んでいます。

----------------------------------------------------------------
C#側

if (obj is string)
{
}

オブジェクトが string 型と互換性かあるかどうか
-----------------------------------------------------------------

C++/CLIで上記のようなis演算子に変わるやり方がありましたら
教えて頂けると助かります。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

GetType、typeidを使う。

Sample)

System::Object^ o;

o = gcnew System::String(Lほげ);
//o = 1;
if (o->GetType() == String::typeid) {
Console::WriteLine(String);
}
else if (o->GetType() == Int32::typeid) {
Console::WriteLine(int);
}
return 0;


返信引用
human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

>>Blueさん

さっそく試してみたところ上手く行きました。書き方が分からなかったので
大変助かりました。

そこでもう1つあるのですが

C#でbaseというものがあるのですがbase キーワードを使用すると、基本クラスの
Getinfo メソッドを派生クラス内で呼び出すことができます。

C#のとあるクラスとメソッド

public class Channel<T> : ChannelFactory<T>
{

  public AAAAA(string bbb) : base(typeof(T))
  {

}

}

このbaseはC++/CLIではどのような表現になるのでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

うーん、分からない部分を聞くのは良いのですけれど、
入門書を見れば書いて有りそうな話なので、
一度は入門書等で確認すべきではないかなと思いますが。

C++言語なら中括弧の中で親クラス名::Getinfoで呼び出すと思いますけれど。
そういう意味ではないのかなぁ?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

__super?
どっちにせよコンストラクタでは使えないから、親クラス名を記述したほうが
統一がどれる気がする。

using namespace System;

generic<typename T>
ref class Hoge
{
public:
Hoge(String^ s) {}
void Func() { Console::WriteLine(LHoge::Func); }
};

generic<typename T>
ref class Moge : public Hoge<T>
{
public:
Moge(String^ s) : Hoge(s) {}
void Func() { __super::Func(); } // Hoge::Func(); でも可
};

int main(array<System::String ^> ^args)
{
Moge<int>^ m = gcnew Moge<int>(L");
m->Func();
return 0;
}


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

最初の質問についてですが、dynamic_cast を使った方が
C# の is 演算子に近い IL にコンパイルしてくれるようです。
使用例は下記ページの dynamic_cast_clr.cpp
http://msdn.microsoft.com/en-us/library/cby9kycs(VS.100).aspx

各言語のキーワードの比較はこちらです。
http://msdn.microsoft.com/ja-jp/library/zwkz3536.aspx


返信引用
human
 human
(@human)
ゲスト
結合: 15年前
投稿: 26
Topic starter  

C#のBaseはC++/CLIでは__superを使うのですね!

自分なりに理解するのに時間がかかってしまい返信が遅くなりました。
入門書は一通り目を通したのですが読んだ入門書が悪いのかこの辺の
コンバートについての記載がなかったので質問させて頂いた次第です。

今回は大変勉強になりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました