- 1 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 20:05:20.33 ]
- The C++ Standards Committee
www.open-std.org/jtc1/sc22/wg21/ Wikipedia ja.wikipedia.org/wiki/C%2B%2B11 C++11/C++1y 16 toro.2ch.net/test/read.cgi/tech/1349356417/
- 227 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 00:35:42.00 ]
- まとめるとプロジェクトは失敗するもの
- 228 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 00:59:50.26 ]
- JISのC++11って何巻目になるん?
1冊1万前後だから結構な出費だな
- 229 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 07:30:48.76 ]
- >>227
まとめすぎwww
- 230 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 08:35:27.55 ]
- COM(Direct3D11)を使ってプログラミングしてて、
インターフェースの解放(Release)を忘れないように、 shared_ptrを使おうとしてるんだけど、壁にぶつかった。 ある関数はインターフェースのポインタを引数に取る。 この場合は以下で大丈夫。 shared_ptr<ID3D11xxx> pD3D11xxx; ・・・ Func( pD3D11xxx.get() ); しかし、関数の中にはインターフェースのダブルポインタ(ID3D11xxx* const* pp)を引数に取るものがあって、 以下のように書いても「'&'に左辺値がない」と言ってコンパイラに怒られる。 Func( &pD3D11xxx.get() ); どうしたものかと、検索をかけると、 shared_ptrではなくて自作っぽいスマートポインタを作って、 pD3D11xxx.GetAddressOf()みたいなメソッドを利用して引数に与えていた。 std::shared_ptrでは上記みたいな関数に渡せないの??
- 231 名前:230 mailto:sage [2013/04/17(水) 08:39:56.70 ]
- ID3D11xxx* p = pD3D11xxx.get();
Func( &p ); ってしたらコンパイルは通ったけど、 もっとエレガントにできないかなぁ。
- 232 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 08:41:29.81 ]
- CComPtrを使えばよろし
- 233 名前:230 mailto:sage [2013/04/17(水) 08:59:24.88 ]
- >>232
CComPtrなら大丈夫なんですね。 しかし、できればATLに依存したくないんです。
- 234 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 09:04:19.90 ]
- ポインタのポインタを受け取るってことはポインタ自体の変更が行われるわけで
ID3D11xxx* p; Func(&p); pD3D11xxx.reset(p); こんな風にするしかないだろう
- 235 名前:230 mailto:sage [2013/04/17(水) 09:20:06.70 ]
- >>234
ありがとう! ああ、そうか。 面倒くさい。死にそう・・・。 調べてみると、どうもATLとは違うMicrosoft::WRL::ComPtrというのがあるみたい。 msdn.microsoft.com/ja-jp/library/vstudio/br230382.aspx なぜATLがイヤかというと、 まず開発がVC++のExpress(無料)バージョンが使えないこと。 自分はPro持ってるけど、他人にプロジェクトを渡すことがあって、 できれば相手にProを強要したくない。 あと、コンパイルした.exeを配布する際、 ATLを使用していると、ランタイムのインストールをユーザーに強要することになる。 WRLだとどうなんだろうか? 開発的にはExpress(for Windows8だけど)で使えることが調べて分かった。 あとは.exeを配布するときにユーザーがWRLのための追加インストールが必要か。 こういうのってどうやって調べたらいいの? DependencyWalkerとかでチェックしかないかな。
- 236 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 09:27:56.32 ]
- >>235
ATLは古いのならWDK7.1辺りに入ってたりする CComPtrはテンプレートなんだからランタイムも糞もないぞ
- 237 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 09:32:01.68 ]
- WTL?
- 238 名前:230 mailto:sage [2013/04/17(水) 09:59:29.69 ]
- 早速WRLのComPtr使ってみた。
余計なコードが激減した。 感動した。 さっきまで悩んでたのがあほみたいだ。 もう他人のことなど知るか(おい) >>236 ありがとう! 安心した。
- 239 名前:230 mailto:sage [2013/04/17(水) 10:07:14.80 ]
- 少し気になったのは、
同じダブルポインタ引数でも、 Create系では&pって渡せるのに、 他の関数ではp.GetAddressOf()で渡さないといけないこと。 後者を&pで渡したらぶっ壊れた。 まぁ、Create系もGetAddressOf()でいけるから、 これで統一しておくほうが無難かな。
- 240 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 10:10:33.16 ]
- またひとりC++/CXの魔境に旅立ってしまったか
- 241 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 10:14:10.97 ]
- ttp://msdn.microsoft.com/ja-jp/library/vstudio/br230430.aspx
日本語おかしいがちゃんと違いが書いてあるじゃない
- 242 名前:230 mailto:sage [2013/04/17(水) 10:22:51.60 ]
- >>241
あ、すんません・・・。 ああ、そういうことか。 参照カウントのこと意識せんといかんのね。 しかし、Create系以外でダブルポインタを引数に取るとか、 ややこしいからやめてくんないかなぁ・・・。
|

|