いまさらというかなんというか・・・C++/CLIをチビチビと調べています。昔からプログラミングという意味ではC++に興味あったけど,まさかいまさらやることになろうとはw 過去に経験があるはEPOCっていう携帯向けのOSで半年ぐらいやったけど,もう忘れたというか思い出せない。しかも完全に独習だw
正直もう新しい言語を覚えるのはしんどいのもあるんだけど…できれば人まかせにしたいんだけど…せっかくなんでゆっくりやってこう。
というわけでまずはVC++2010 ExpressをマイクロソフトからDLしてきてとりあえずWindowsフォームアプリケーションを選択,さてプロジェクトを開いてみたが。。。
・・・えーっと,なにからやれば?(;´▽`A“
CLRって単語は聞いたことがある。同僚から「MFCの代替物のようなものらしい」と教えてもらった。アバウトだけどなんとなくそういうものなのだろうw
.cppを開いてみてがく然としたのが,c++の文法は理解しているつもりだったのにまったく見たこともない記法がある。
[STAThreadAttribute]
int main(array<System::String ^> ^args)
もはやこの記述すらわからないw テンプレートの〆に「^」??パラメータの前に「^」??STAThreadAttributeってなんじゃらほい。これが噂のアトリビュート指向(って言葉がまだあるのかどうかしらないけど)ってやつか??そういやおれがjava案件から手離れしてったころにjavaにも似た言語仕様が追加されそうになってたような。。。
なんかハードルの高さを改めて感じる。。
ぐぐってみるとC++/CLIという.NET向けの拡張言語仕様があるらしい。
^はハンドル型というものでヒープに置く。(ヒープって言葉自体久々聞いたわw)
STAThreadAttributeはアパートメントモデルと、.NETのSTAThreadAttribute – Bug Catharsisが参考になった。[]付けてメソッドの前で宣言することで特定の属性を付加できるようだ?
#pragmaもmanaged/unmanagedで同じような使い方してる。
gcnewはmanaged型を生成するときに使う。newはunmanaged型のみ。こっちは従来の方法どおりで生成できる。
UnManagedClassTest *umct = new UnManagedClassTest();
ManagedClassTest^ mct = gcnew ManagedClassTest();
ちなみにmanagedclassで^を付加しないで生成しようとすると,コピーコンストラクタがないと怒られる。(定義があればもちろんエラーはでない)
CLIって従来の記法とCLRを利用した混在できるのが利点というが。。。わかりづらいw
とまあ,ここまで書いて思ったのだけれど,managed/unmanagedというのはあくまで既存資産を活かすことを目的とした拡張記法なので,今からエントリーするなら基本はmanagedモードで記述するのが当然,といったところか。
あ,でもSTL使うのもunmanagedなのか。。。managedモードで代わりになるやつもあるんだろうけど,知ってるものを使いたければそこで利用するって手もあるのか。わかりづらいコードになりそうだけどw