- 1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ]
- おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!
- 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なコードも書ける、とも言えるし。
- 587 名前:デフォルトの名無しさん [2006/02/11(土) 11:15:34 ]
- >>585 ふむ、いわれてみればそうだな。
俺があまりにも boost 依存なコードを書きすぎていただけだと思う。
- 588 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 15:56:27 ]
- >>581
いろんな言語が使用できるっていうのが.NETのうたい文句のひとつだったから C#だけって言うのはいただけない
- 589 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 16:22:28 ]
- 馬鹿はスルーしる
- 590 名前:デフォルトの名無しさん [2006/02/11(土) 16:26:50 ]
- .NETって実際複数言語で開発してたりすんの?
- 591 名前:デフォルトの名無しさん [2006/02/11(土) 16:48:36 ]
- >>590 俺はドトネトは C# しか使ってないけど、
俺が使ってるアセンブリが C++/CLI や VB.NET で作られているかどうかは知らない。
- 592 名前:デフォルトの名無しさん [2006/02/11(土) 16:53:16 ]
- VC++はVC++で作られていますという件はもはや過去のもの?
- 593 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:26:02 ]
- 「ドトネト」って言う呼び方はアンチっぽいからやめてくれ
- 594 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:31:18 ]
- エロビデオのネバスペみたいなもんか。
- 595 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:39:26 ]
- Win32APIなどのネイティブ呼び出しをC++/CLIでラップしてあとはC#で開発してる。
windows.h の関数や定数の定義をそのまま使える上にInteropで呼び出しも高速なので P/Invokeよりぜんぜんいいよ。 ドトネトよりポチネットのほうが可愛い
- 596 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 18:07:08 ]
- >>595
狂おしいほどに同意 アセンブリの中にネイティブコードを突っ込めるから 逆コンパイルにも対抗できるし。
- 597 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 20:57:49 ]
- そんなことしたら64bitでそのまま動かないじゃん
- 598 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 03:52:02 ]
- >>597
32bitで何か問題でも?
- 599 名前:デフォルトの名無しさん [2006/02/12(日) 16:51:41 ]
- C++/CLIがNativeとManagedの混合アプリを作るのに優秀なのは理解できるが、
/clr:safe なアプリをあえてC++/CLIで作ることに意味があるのだろうか。
- 600 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 17:37:42 ]
- >>599
特になし。C++/CLIはC++使い慣れてる(C++ライブラリを膨大に抱えてる)人を .NETに繋ぎとめておくためのもの。
- 601 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 21:00:01 ]
- 2003のWin32APIやMFCを2005ExpressEditionで使おうと
頑張ってみたが無理だった。 Win32APIはコンパイル通るけど警告出るし、 MFCに関しては全くお手上げ。
- 602 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 22:31:04 ]
- >>601
WinAPIは2003から持ってこなくても最新のPlatform SDKを入れればいいだろうに。
- 603 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:14:27 ]
- C++/CLIはVB.NETで作ったクラスライブラリを呼び出すことも可能?
- 604 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:33:15 ]
- 可
- 605 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:51:30 ]
- >>602
最新のSDK持ってきたら、警告なくなったよ。ありがと。
- 606 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 08:02:58 ]
- managed C++ みたいに C++/CLI もやっぱやーめたなんてことにはならんだろうな?
前者はなんか標準化団体には出されてたんだっけ?後者はだされてたよな?
- 607 名前:デフォルトの名無しさん [2006/02/13(月) 08:05:18 ]
- >>605
感謝は言葉ではなく物で示せ。
- 608 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 12:44:28 ]
- >606
今、ISO で標準化の審査中
- 609 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 13:03:53 ]
- >>608 それは C++/CLI だよね?
もう Managed C++ はいらんでそ。
- 610 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 14:01:33 ]
- (1)for each( int obj in v)
(2)for each( int^ itr in v) (3)for each( int% r in v) for each する場合、どれがお勧め?
- 611 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 15:26:41 ]
- >>609
www.ecma-international.org/publications/standards/Ecma-372.htm これがISOに提出された。まあISOになる可能性はないと思うけれど。
- 612 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 16:55:39 ]
- >>611 あれ?ないの?
- 613 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 17:22:33 ]
- CLI 自体はすでに ISO 標準になってるんだよな。
Java VM も ISO 標準にすればいいのに。 Java 言語とは切り離して。
- 614 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:06:42 ]
- で、ISO 標準て何の役に立つの?
- 615 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:07:31 ]
- ネームバリュー
- 616 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:10:32 ]
- 実質を無視したネームバリューなら、
Java >>>>>>(壁)>>>>>> C丼(I$O) だね。
- 617 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:13:08 ]
- >>616 実質的なネームバリューだと思うけど。
- 618 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 21:22:11 ]
- >>616
Java のネームバリューってかなり実質的なものだと思うぞ。
- 619 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 23:26:25 ]
- >>613
EMCAの時に、J2EEも同時に採用されることにこだわった。 当時は、IBMその他ベンダーが独自ビジネス向けフレームワークの覇権を争っていた。 Javaはまだまだ言語規格の変化が激しいから、10年前なら見送りも妥当だったと思う。 今は、C++みたいにろくにない実装も規格を作るのに抵抗がなくなってきている。 だからJavaも今からISOの提出してもいいと思うけれど、 EMCAのWin系規格みたいに放置されると困るよね。 C#やCLIもそんなことにならないかと心配。
- 620 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 04:09:12 ]
- >>618
確かにJavaはネームバリューだけだな
- 621 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 09:09:07 ]
- ドトネッツは実質NO.1
(ベーパーウェア部門)
- 622 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 13:57:47 ]
- >610
vの中身を書き換えたいときは、必然的に(3) (1)と(2)でコンパイル結果に差が出るかは知らんが、同じなら(2)の方が他の参照型などと統一性が採れると思う
|

|