1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
486 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 11:48:01 ] 二項演算子で単項で使われていなかったものオンパレードですね
487 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 13:02:57 ] cli_class が確定してなくね? generic <typename T> ref struct cli_class { T m_member; cli_class() {} cli_class(cli_class<T>% n) :m_member(n.m_member) //error {} }; const 付けると、型パラメータも影響を受けてキャストできなくなるから const 外した
488 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 17:35:17 ] GCC の仲間に C++/CLI コンパイラが仲間入りする日が いつかやってくると思う人、いる?
489 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 17:51:54 ] ノシ Java もコンパイルできてるんだから、CLI抜きでやっちゃいそうな気がする
490 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 18:02:27 ] >>489 おまい、それ普通のgcc。
491 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 18:09:14 ] mingwで構造化例外って実装されてるの?
492 名前:484 mailto:sage [2006/01/31(火) 18:49:53 ] >>487 なるほどconstはずしたらできました。 ありがとうございました。
493 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 19:34:10 ] >490 ああ、実行エンジン無しで作っちゃいそうな気がするってこと
494 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 00:17:29 ] CLRのこと?
495 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 06:59:47 ] ランタイムはコンパイラコレクションが 提供しなくてもいいんじゃない?
496 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 08:47:44 ] GCC で CIL を出力するだけじゃ意味がないから、exe を実行するときバインドするの実行 エンジンはCLR か mono に頼るの?
497 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 09:02:05 ] >>496 そうなるだろうなぁ。 mono の mcs の方が C++/CLI コンパイルできるように・・・ ならないだろうな。 mono ではすでに ASP.NET はいい感じで動いてるんだったっけ? Java の牙城をちょっとは切り崩すことが出来る、のかな? って、Webアプリケーションは PHP でしか書いたこと無いんだけど。
498 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 09:55:46 ] monoって実行ファイル起動時に外部エンジンにアタッチしてやりとりできるいい仕組みって ある? Java の JNI で C/C++ から VM 叩くようなヤシ
499 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:32:17 ] DLL の呼び出しと同じ仕組みが使えた気がする。 以前、コンソールアプリをポータブルに作ろうと思って、 ncurses ライブラリを使って C# コンソールアプリを作った。 ncurses の DLL を C# から呼び出すようにして。 それは Visual Studio .NET 2003 で作成。 で、ncurses の共有ライブラリが入ってる Debian に、 VS でコンパイルした *.exe をそのまま持って行って、 何も考えずに mono で実行したらちゃんと libncurses.so とかその辺をダイナミックリンクしてくれてあっさり動いた。
500 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:34:03 ] pc5.2ch.net/test/read.cgi/tech/1020215602/21 の兄弟の片割れが漏れなんだが(もう一人は誰か知らん) その詳細なリポートを書いた mono の前スレが見れん。
501 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:34:53 ] それはそうと、JNIって「C/C++ から VM 叩くようなヤシ」か? 漏れ JNI は使ったことないんだけど、逆じゃね?
502 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:38:03 ] つーわけで、CLI からは DLL と同じように so が呼び出せると思う。 かなりオープンというか、なんというか・・・
503 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:59:04 ] 連投ごめん。リンク間違えた。 pc8.2ch.net/test/read.cgi/tech/1100616350/21 ね。
504 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 13:05:25 ] >501 JNI は Java からの C 呼び出しと、C/C++ からの JVM 呼び出しの両方を規定してるお
505 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 13:14:26 ] >>501 お、そうか。スマンコ ネイティブコードからの呼び出しは正直シランコ
506 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 09:47:25 ] ええっと、長年Cオンリーでやってきたロートルなんですが、 新しい(?)ポインタの^に関して、詳しく解説した書籍とかありませんでしょうか? char型の文字列は 文字が1文字ずつ入っていって、最後が\0になっているという、 アセンブラレベルからするととてもわかりやすいものだったのですが、 String^ s = "0123456789" が、メモリ上にどの用に格納されるのか さらに、この文字列に対して、 char c,*p ; p=s; c = *(p+10); といった、従来のメモリ上のキッタハッタが出来なくなってきているのは、どういう仕組みなのか を理解したいのですが。
507 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 10:18:32 ] managedなだけよ
508 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 10:43:00 ] >>506 JavaやLispやCLIの実行環境がどうなっているか調べろ。
509 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 12:53:41 ] >>508 それを詳しく解説した書籍とかを訊いてんだよ、ボケが。
510 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 13:02:48 ] そんな怒らないでよ(w これ読みなよ、日本語はいいのがないから。 Shared Source Cli Essentials www.amazon.co.jp/exec/obidos/ASIN/059600351X/
511 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 15:55:01 ] >>506 C++のclassは理解してますか? class objectを指すポインタと思えばよいかと。
512 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 19:54:02 ] template引数を使おうとしたらエラーが出るのですが、何がいけないのでしょうか? ref struct F{//FNの引数にしようかなと int operator()(int a){return a;} }; generic <typename FN> ref struct Fn{ void test(){ FN fn; fn.operator ()(100);// : error C2039: '()' : 'System::Object' のメンバではありません。 } };
513 名前:512 mailto:sage [2006/02/03(金) 20:13:31 ] generic -> template にしたら通りました。 generic の typename は Object前提になるのかな
514 名前:512 mailto:sage [2006/02/03(金) 20:24:11 ] Reflectorでみてみたら generic で宣言した方はパラーメータが残ってた、 class_name<T> TはObjectを想定してるので、パラメータが残せてるんかな... templateの方はパラメータが固定されてた -> class_name<int>
515 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 23:42:54 ] 単に、マネージドとネイティブの混合型になるから駄目なだけ
516 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 23:44:42 ] >515 は違った。genericsは背景型が System::Object型であることを前提としており、 コンパイル時では閉じない限り、型が確定しない そこら辺が、文字列置き換えの template とは性質が違う
517 名前:512 mailto:sage [2006/02/04(土) 02:33:08 ] >>516 なるほどなっとくしました。 ありがとうございました。 System::Collections::Generic::IEnumerator<T> などでcovariant return valueが発生したときはどうしたらいいん...orz
518 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:45:42 ] つーか、512よ。インターフェイスで拘束されているわけでもない不定の FN 型の fn のメソッドが呼び出せるわけないだろ? >517 は具体的な例でしてくれないと状況がわからん
519 名前:512 mailto:sage [2006/02/04(土) 13:45:57 ] >>518 すいません。ファンクタのconvariantなケースでなくて、 C++/CLIで一般に遭遇した場合という意味です。 以下のような感じでやってみたのですが、インターフェイスの実装ができませんでした。 他言語だとどうなるのか調べんとだめかな... //NG typedef String^ MyType; typedef System::Collections::Generic::IEnumerator<MyType> MyEnumeratorType; typedef System::Collections::Generic::IEnumerable<MyType> MyEnumerableType; //OK //typedef Object^ MyType; //typedef System::Collections::IEnumerator MyEnumeratorType; //typedef System::Collections::IEnumerable MyEnumerableType; ref struct MyTest :public MyEnumerableType { ref struct MyEnumerator : public MyEnumeratorType { virtual property MyType Current { MyType get () { return nullptr; } } virtual bool MoveNext(){ return false; } virtual void Reset(){} }; virtual MyEnumeratorType^ GetEnumerator() { return gcnew MyEnumerator();} };
520 名前:519 mailto:sage [2006/02/04(土) 15:03:57 ] private: virtual Object^ System::Collections::IEnumerator::Current { Object^ get() sealed {return nullptr;} } という風にC#を真似てみたけどだめみたいでした。 以下はC#でのサンプル class MyTest :System.Collections.Generic.IEnumerable<string> { class MyEnumerator :System.Collections.Generic.IEnumerator<string> { public virtual string Current { get { return null; } } public virtual bool MoveNext(){ return false; } public virtual void Reset(){} public virtual void Dispose(){} object System.Collections.IEnumerator.Current { get { return null; } } }; public virtual System.Collections.Generic.IEnumerator<string> GetEnumerator(){ return new MyEnumerator();} System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return new MyEnumerator(); } };
521 名前:519 mailto:sage [2006/02/04(土) 16:15:08 ] covariant return value の場合、2段階で実装すればなんとか可能でした。 ref struct MyTestBase :public System::Collections::IEnumerable { ref struct MyEnumeratorBase :public System::Collections::IEnumerator { virtual property Object^ Current { Object^ get () { return nullptr; } } virtual bool MoveNext(){ return false; } virtual void Reset(){} }; virtual System::Collections::IEnumerator^ GetEnumerator() { return gcnew MyEnumeratorBase();} }; ref struct MyTest :public MyTestBase,System::Collections::Generic::IEnumerable<String^> { ref struct MyEnumerator:public MyEnumeratorBase,public System::Collections::Generic::IEnumerator<String^> { virtual property String^ Current { String^ get() new {return nullptr;} } virtual ~MyEnumerator(){} }; virtual System::Collections::Generic::IEnumerator<String^>^ GetEnumerator() new {return gcnew MyEnumerator();} };
522 名前:デフォルトの名無しさん [2006/02/04(土) 18:01:17 ] managed C++ やろうぜ!! 002 ttp://pc8.2ch.net/test/read.cgi/tech/1139043535/l50
523 名前:デフォルトの名無しさん [2006/02/04(土) 18:07:52 ] ref classのメソッドでEnumWindowsを使おうとしてます コールバック関数をクラスのメソッド、LPARAMをこのクラスのポインタとしたいのですが いい方法はありますでしょうか?
524 名前:519 mailto:sage [2006/02/04(土) 21:59:53 ] 値型だとインターフェイスからしか派生できないから 521の手法使えないね...orz 値型なら Type<int,Type<int,int> >と記述できたのに Type<int,Type<int,int>^ > または Type<int,Type<int,int>^ >^ とするしかないか...orz
525 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 22:31:14 ] >>523 P/Invokeの場合にはcallbackにはdelegateを使うんだっけな。 C++/CLIの場合はコールバック用のクラスとメソッドは普通のclassで作って ref classに包含したほうが楽だ。
526 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 22:33:29 ] >523 過去ログにがいしゅつ
527 名前:523 mailto:sage [2006/02/04(土) 23:47:58 ] >>525 ありがとうございます チャレンジしてみます。
528 名前:523 mailto:sage [2006/02/05(日) 02:31:27 ] delegateとコールバックで検索したら見つかりました www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingcallbackfunctions.asp
529 名前:デフォルトの名無しさん mailto:sage [2006/02/05(日) 19:43:18 ] generic parameterからgcnewできないと思ったら new制約なんてあったんだね。 C#にあるみたいなんで試してみたらできたよ。 generic <typename T>where T : gcnew() ref class A {A(){ T t = gcnew T();}};
530 名前:デフォルトの名無しさん [2006/02/05(日) 23:48:54 ] System.Windows.Forms.ShowDialog()をした時にタスクバーに Windowが追加されちゃいます タスクバーに出てこない方法ってりますか?
531 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 00:31:03 ] >>530 ShowInTaskbar
532 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 01:08:43 ] >>531 さんくす!
533 名前:デフォルトの名無しさん [2006/02/06(月) 01:41:27 ] C++プログラマーには二種類いるわけ。 C++をベターCとして使う人とC++の機能を目一杯使う人。 俺はベターC派なんだな。 C++の機能は必要最小限しか使わない。 特に枯れてない最新技術はまず使わない。 そして必ずGCをかます。 これは俺というよりも会社の方針なんだわ。 実の所、C++を完璧に使いこなせるPGはほとんどいない。 皆、言語の一角に住み着いてプログラミングする。 これが大規模な開発になるとデスマの原因になるんだな。 デスマを防ぐためにあえて制限を設ける。 俺は会社の方針は正しいと思っている。
534 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 03:45:59 ] C++/CLIだと値クラスのプロパティとインデクサををref化できるね。 C#ではやり方が悪いのかできなかった。言語思想が違うためだろうか これができないとインデクサで変更を扱う値型のコンテナが作れない気がするんだが... value struct Val{int val;}; value struct Test { void test(){ Test test;test[100].myt.val=200;Console::WriteLine(test.myt.val); } Val myt; property Val% default[int]{ Val% get(int index){ return myt; } } };
535 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 09:34:19 ] sage
536 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 12:59:49 ] Equals を使うな。使う事を推奨するな。 www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.as ...
537 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 15:53:01 ] >>536 リンク修正 www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.aspx www.ailight.jp/blog/kazuk/archive/2006/02/01.aspx
538 名前:デフォルトの名無しさん [2006/02/06(月) 16:16:06 ] ようするにさらし上げ?
539 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 17:05:29 ] >>534 setするほうのプロパティを作ればよいだけではないのか?
540 名前:534 mailto:sage [2006/02/06(月) 19:13:17 ] >>539 それだとプロパティへの代入はできるけど、プロパティを介する変更ができないと思う。 Val%をValに変更してsetをつけても、test[100].val=200;だと変更できない Val tmp;tmp.val=200; test[100]=tmp; なら変更可能だけど... 問題なさそうで問題あるケース generic <typename T1,typename T2> value struct M {T2 myt; property T2% default[T1]{ T2% get(T1 t1) { return myt; } void set(T1 t1,T2% val){myt = val;}} }; T2%だと M<int,M<int,int>> m; int i=100; m[100][100]=i; //と書ける //ただ変数にしないといけない難点が... T2だと m[100][100]=100;と書けるが変更できない
541 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 19:53:28 ] 海外の大御所がある雑誌で言った。 「私はもう二度と .Net の記事を書かない。」 マイクロソフトにだまされてる奴ら、お疲れ。
542 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:05:34 ] >>541 大御所が誰だか教えて
543 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:13:56 ] プラウガもC++/CLIやってるけどな。 www.dinkumware.com/ やつらはVC++用ライブラリにたずさわっているし、 C++/CLIはEMCAの標準化に関与しているから。 まあC++/CLIはいい言語拡張と思わないけれど、 managed C++の将来のなさには流石に脱帽。
544 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:33:14 ] 将来も何もmanaged C++はC++/CLIまでの暫定版なんだから、 managed C++の将来はC++/CLIじゃないか。 managed C++は OldSyntaxだべさ。
545 名前:デフォルトの名無しさん [2006/02/06(月) 20:39:32 ] どれかひとつ選ばなければならないとしたら不本意ながらC++/CLIを選ぶしかないわな。
546 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:46:22 ] レヴューリリースだわな、managed C++は。
547 名前:デフォルトの名無しさん [2006/02/06(月) 20:49:30 ] 正直、記憶力がおいつかない。
548 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:55:37 ] でも、サービスパックも出てない VisualStudioを使うほどバカじゃなし。 MS製以外でコンパイル通るヤツってある?
549 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 23:39:31 ] >>548 無いよ。バカ
550 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 00:04:25 ] バカじゃん
551 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:01:12 ] おまえら、VS2005マジで使うの? バカじゃん。 すでに、MSはSP出荷を確約してるんだぞ。
552 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:44:04 ] >>551 じーっと枯れるのまってろこのうすらタコ!
553 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 02:14:49 ] >>548 VB6でも使っとけよ wwww
554 名前:デフォルトの名無しさん [2006/02/07(火) 02:41:12 ] >>552 N88 BASIC
555 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:21:32 ] バカが3匹。
556 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:51:33 ] Win32コンソールアプリケーションの int _tmain(int argc, _TCHAR* argv[]) は int main(int argc, char* argv[]) にしちゃいますけど。いいですよね?引数がアルファとかヌメリックなら。
557 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 11:32:34 ] 漏れは int main(const int argc, const char* const argv[])
558 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:00:33 ] >>557 そこまでいくなら戻り値もconstにしてはどうか?
559 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:21:59 ] >>558 参照返しじゃないから意味なし。
560 名前:558 mailto:sage [2006/02/07(火) 13:27:44 ] >>559 ああ、確かに意味は無いなw でも、argcもconstにしてるけど、これも意味が無いから、 それをさらに徹底させるって意味で返り値もconstにすればいいのにー っと思っただけ
561 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:04:04 ] argcの場合、意義はともかくプログラム上の意味が変わる。
562 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:21:19 ] うっかり書き換えるとコンパイラにゴルァされるとか
563 名前:558 mailto:sage [2006/02/07(火) 14:26:48 ] 確かに関数内では意味が変わる...か。 関数のオーバーロードでは同一視されるから一緒と思ってたけど、 内部の事は忘れてた。thanks
564 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 15:01:05 ] >>558 お前素直な奴だな
565 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 00:54:04 ] そこでconst_castの登場だな
566 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 18:26:06 ] 全部ILで書こうぜ
567 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 19:24:23 ] 遅いからヤダよ。
568 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 01:52:44 ] STL/CLIお蔵入り
569 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 04:28:08 ] 固定長配列はcli::array以外に用意されてない?
570 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 11:58:31 ] >568 STL.NETは別途配布されるんじゃなかったの?
571 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 12:38:09 ] BOOST.NETも出たりとか。 正直大混乱。
572 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 13:44:43 ] 正直いってWinXPのSP2入れたくないからとかいう理由で SP1を使ってる馬鹿と同レベルの理屈だな 新しいものの方がいいに決まってる。たとえバグ込みでも 長い目で見れば将来性の高いほうを選択する方がよい
573 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 17:47:52 ] >>571 BOOST.NETって何?そんなんあんの?
574 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 22:47:44 ] >>572 その将来性のおかげで、君の部下が次々と止めていくんだがどう責任取るのかね?
575 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 21:58:53 ] 値型にデフォルトコンストラクタと代入演算子を定義できる .NET言語ってあるんかな?
576 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:01:31 ] フレームワーク内のprivateないくつかの構造体を見ると、 デフォルトコンストラクタ使ってるのがいくつかあるな。 Win32関係の構造体で自分のサイズを設定してるんだが。
577 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:20:02 ] >>575 つIL (ilasm) まぁぶっちゃけいらないっていうかあってもまずやっちゃいけないしな
578 名前:575 mailto:sage [2006/02/10(金) 23:53:50 ] >>576 ,577 どうも Reflectorでみてみたら staticコンストラクタで代用しているのはありました。 こんな感じで試してみようかな... ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=40822
579 名前:575 mailto:sage [2006/02/11(土) 01:08:41 ] やってみたけどよくわからんかった。でも templateの部分特殊化でCLI型が使えるみたいだから、それでcreateすればいいか. template <typename T> ref struct Type{ T create(); }; template <typename T> ref struct Type<T^>{ T^ create(); };
580 名前:デフォルトの名無しさん [2006/02/11(土) 07:51:31 ] C++ で boost の shared_ptr とか boost::program_options とか 使いまくりんぐのプログラム作ってきたんだけど、 C++/CLI でそのコード流用できるんですかね? stl::map とか使いまくりんぐノプログラムは そのままで動くのか、STL.NET みたいなモノをつかうように 移植しなけりゃならないのか、System::Collections を 使うのが C++/CLI 流なのか・・・・・・ 何でも出来るから何使えばいいか迷う。
581 名前:デフォルトの名無しさん [2006/02/11(土) 09:40:08 ] C++/CLIは便利だと思うが、棲み分けに失敗した感じがするな。 C#で統合するはずが、C++/CLIで統合されるとは…。 本当は.NET対応はC#だけでよかったんだと思う。
582 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 10:25:45 ] >>580 managedなobjectをどう扱いたいかによるだろ? 例えば数値計算してその結果を3Dグラフ表示するような場合、 数値計算の部分は普通にC++使えばいいけど、(例えばboostなど) 画面表示の部分はどうしてもCLIに頼らないといけない。 C++/CLIは基本的にC++の上位互換と考えていいから。 "spaced keyword"なんていうのは非互換だけどね。
583 名前:デフォルトの名無しさん [2006/02/11(土) 10:29:11 ] おまえら、どのエディション使ってるの?
584 名前:デフォルトの名無しさん [2006/02/11(土) 10:35:44 ] >>582 うむ、いっていることは分かる。 まさに数値計算して可視化、ってのは仕事で必要。 しかも膨大な数値計算用のライブラリ(自作+他作)がすでにある。 今一番の問題は、コマンドラインをパーすするために便利な boost::program_options を C++/CLI コンソールアプリでも 使いたいってことかな(笑
585 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:10:32 ] C++/CLIは、CLIに頼らなければいけない時だけ、 managedなコードを書かなければいけないC++だろ? embedded C++みたいに言語の機能抜かれているわけじゃないから。 ライブラリであるSTL .NETは、C#やHaskelからも使えるSTLライブラリとして、 C++特有のところは抜かれているけれど。(特殊化関連など)
586 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:11:09 ] >>585 > managedなコードを書かなければいけないC++だろ? managedなコードも書ける、とも言えるし。