○○とゲームプログラミング Rev 3.0.0
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
04/02/01 20:56ID:UHX0VJ3UOOも含め、ゲームプログラムの制作に関わる様々なトピックを
語りましょう。
単なるC++でのクラスの書き方から、設計やパターン、制作手法
まで守備範囲広し。
過去スレ:
OOとゲームプログラミング Role2
http://pc2.2ch.net/test/read.cgi/gamedev/1067458051/
OOとゲームプログラミング
http://pc2.2ch.net/test/read.cgi/gamedev/1005144931/
0310名前は開発中のものです。
04/03/23 21:32ID:02H0l1Zu| ≡ ('A` )
│ ≡ 〜( 〜)
↓ ≡ ノ ノ
0311名前は開発中のものです。
04/03/23 21:35ID:Yrm+HBGz凡庸な人間が10人でやる仕事が一番多い。
0312名前は開発中のものです。
04/03/23 21:59ID:rzkxl8ISだれもそんな事言ってなさげ
0313名前は開発中のものです。
04/03/23 22:14ID:0fFfy0e5ほっとけばよいのです
テンプレートばかり使う自己満足を通過しなけりゃテンプレートも使う実力派プログラマにはなれない訳だし。
オブジェクト指向の出立ちの頃もオブジェクトが読めないからダメだという人間はいくらでも居たし。
0314名前は開発中のものです。
04/03/23 23:44ID:ZvtfbrtIいや、そもそもテンプレー厨はOOの本質を見抜けず、
とりあえず使い方だけわかるテンプレートで技巧を凝らしてしまうところに問題がある。
テンプレー厨は自分がテンプレー厨であることに気づけない。
0315名前は開発中のものです。
04/03/24 00:39ID:8nBkrhzz別に構わないと思うけど、始めなければ始まらないし。
それにtemplateを使うならオブジェクト指向にこだわっていると視野が狭くなり過ぎる。
template は行き着くところまで行き着けばプログラミングではなくメタプログラミング
本質的にはプログラムを生成するプログラムでオブジェクト指向は
通常のプログラムでのデータ構造の設計的位置づけになる。
データ構造の設計は重要だからオブジェクト指向は無視できないが、
だからといって操作対象はオブジェクト指向である必要性もないだろう。
たとえば効率的なコードを書きたいが難解だから、
記述内容とは違うコードをそこに書き出して記述内容は
意味的に簡単になるようにやってみようとかね。
Gems にもあったよな気がする。
ゲームに特化しないならboostなどはネタの宝庫だろう。
0316名前は開発中のものです。
04/03/24 00:46ID:dykDPviV下手なソース書く香具師のドキュメントは、
ソース以上に危険な罠。
下手ソースを読む能力もプログラム能力の一部で、
経験等による能力差が大きい罠。
しかし、テンプレばかり使うテンプレ厨なんて見たことないな。
テンプレなんてSTLとBoostとあと汎用的な所に自前テンプレ使うぐらいが
ほとんどじゃ?
Lokiばりのコードを自作して使いまくってる香具師とかいるのか?
0317名前は開発中のものです。
04/03/24 00:59ID:2iAf0hb8>しかし、テンプレばかり使うテンプレ厨なんて見たことないな。
やねうらおのことかと思たよw
0318名前は開発中のものです。
04/03/24 01:14ID:4/KoOJE2だからテンプレートによるジェネリックプログラミングと
オブジェクト指向プログラミングは
まったく別のプログラミングパラダイムなんだって
STLの設計者はJavaが嫌いだと
RadiumSoftwareに書いてあった
0319名前は開発中のものです。
04/03/24 01:19ID:8nBkrhzzいやはや、ちとキチガイ神経症ヤロウにグチグチやられていて、
発言煽り気味だったかな
0320名前は開発中のものです。
04/03/24 01:20ID:k9+/HUJp>RadiumSoftwareに書いてあった
Java好きの俺がSTLの関数オブジェクトを多用するコードに
馴染めない理由が分かった気がする。
0321名前は開発中のものです。
04/03/24 01:30ID:2iAf0hb8Java好きなら、Java+Jakarta Velocity でも
ジェネリックプログラミングは可能なんじゃないか?
とたいして知りもしないのに言い放つテストファースト。
0322名前は開発中のものです。
04/03/24 10:40ID:vj19C3d5http://objectclub.esm.co.jp/JavaGenerics/
http://www.mamezou.com/tec/Tips/javaGenericsVsCppTemplate/article2.html
C++のとはだいぶ違うみたいだけど。
0323名前は開発中のものです。
04/03/24 11:18ID:AnwxV13Lやっぱりジェネリックプログラミングが今後の流れになっていくのかな
構造化→オブジェクト指向→ジェネリック
みたいな。
ちと、真面目に勉強してみるか・・・・鬱
0324名前は開発中のものです。
04/03/24 14:03ID:qtDYhwcnいい解説ってないかなぁ
0325名前は開発中のものです。
04/03/24 14:27ID:vj19C3d5>ジェネリックプログラミングはソフトウェアコンポーネントを汎用化すること であり、
>それによってコンポーネントが多様な状況下で簡単に再利用できるよう になります。
で、コレを実現するための「(C++の)技法」が一杯あるわけだけど、普通にゲーム作ってる限り
boostとかの成果の一部を使えればいいんであって、そういう技法を真面目に追求なんてべつに
しなくてもいいではないかな?
へたに「技法」を使ってしまうと、糞コード量産してテンプレ厨とか言われかねない罠。
0326名前は開発中のものです。
04/03/24 18:59ID:4/KoOJE2と思ったらテンプレートでできないか検討する
ぐらいでちょうどいいと思われ
0327名前は開発中のものです。
04/03/29 06:06ID:HnL0boZh0328名前は開発中のものです。
04/03/29 09:52ID:htU9rKwGところで、STLって使えるけど使えないと思いませんか?
vectorの場合、100要素しかないかもしれないし、1万要素になっちゃう
かもしれないvectorで、reserveしとくのもなんかダサいし、かといって
要素を追加すると1万要素もmemcpyなんて事態も恐ろしい。
かといって、listもmapもsetもなんかヒープに1万個の要素のメモリ断片
を作るかと思うと恐ろしい。
なんて事を考えるとSTLを使ってしまうけど使いにくいです。
iteratorもキモイですね。[]オペレーターもキモイです。
かといってキモさを払拭するために、ジェネリックにする事が存在理由になっている
スパゲッティコードを読むきはおきません。それは怠惰がゆえかもしれませんが、
しかし、そこに、とてつもない不毛感、虚脱感、無益感、あらゆる世の中の無意味さを
感じてしまうのです。なんだろう、複雑さの割には効果がないっていうんでしょうか。
中途半端な理解による誤解かもしれませんが。
0329名前は開発中のものです。
04/03/29 10:01ID:uUZopZ9n0330名前は開発中のものです。
04/03/29 10:09ID:htU9rKwGというか、何のための"vector"なのかということですね。
最初っからデータ量がわかっているなら、素直にnew type[ numElements]
でいいわけですよ。
予測として余分にリザーブしてある領域を超えると、とてつもない
メモリー帯域の浪費が起こる。
この辺が美しくないでしょう?
かといって何かいい手があるかというと”?”ですけど、だったら
最初っからないほうが潔いんじゃないかって考えたりします。
0331名前は開発中のものです。
04/03/29 10:40ID:uUZopZ9nこれでサイズ変更時に、メモリの再確保と転送をデータ型に合わせて、
一つ一つ書く方が潔いと思うのならそうすればいい。
ただしデータ設計の問題をSTLの問題にするのは本末転倒。
0332名前は開発中のものです。
04/03/29 11:34ID:htU9rKwGデータ設計もクソもないでしょう?
問うている問題自体が判ってないよ。
0333名前は開発中のものです。
04/03/29 11:36ID:htU9rKwG0334名前は開発中のものです。
04/03/29 13:18ID:uUZopZ9n>一つ一つ書く方が潔いと思うのならそうすればいい。
これが読めないの?
STLはあくまでも特定のアルゴリズムで型の扱いを汎用的にするためのものであって、
メモリーサイズが変化する事に万能に対応できる魔法の道具ではない。
そんな魔法が存在しない以上は、負荷軽減を目的とする場合、
データの転送が最小限で済むように、データをグループ化したりするわけだが。
で、潔い方法とやらは、メモリの再確保に関してSTL以上に簡潔に書けるの?
ぜひ
>new type[ numElements]
で、どうやって
>メモリー帯域の浪費が起こる。
が回避されるメモリ再確保に対応するのか、その魔法を見せてもらいたい。
0335名前は開発中のものです。
04/03/29 13:27ID:wLKWJAcK0336名前は開発中のものです。
04/03/29 13:29ID:uUZopZ9n>new type[ numElements]
これは外そう。
・条件
データ設計は直は見直さず、「メモリー帯域の浪費がおこらない」、
メモリーの再確保を行うための魔法の呪文。
0337名前は開発中のものです。
04/03/29 13:30ID:uUZopZ9n↓訂正
>データ設計は見直さず、「メモリー帯域の浪費がおこらない」、
0338名前は開発中のものです。
04/03/29 14:00ID:bi8ippWhうーむ、こうやってオレコンテナライブラリが増えていくのだろうか…
0339名前は開発中のものです。
04/03/29 14:08ID:xpiQWYibそんなの臨機応変に使えば?だれも強制してないよ。
潔いのがいいならCでもアセンブラでも使えばいいし
C++でもSTL使いたくなきゃ使わないで済むしね。
それなのにキモイから不要とか潔くないって意見を押し付けるのはどうかと。
0340名前は開発中のものです。
04/03/29 14:53ID:ZUeEszIy>STLはあくまでも特定のアルゴリズムで型の扱いを汎用的にするためのものであって、
>メモリーサイズが変化する事に万能に対応できる魔法の道具ではない。
糞設計は、STL使いの罪。それを許してしまうのは、STLの罪。
0341名前は開発中のものです。
04/03/29 16:03ID:htU9rKwG『予測として余分にリザーブしてある領域を超えると、とてつもない
メモリー帯域の浪費が起こる。
この辺が美しくないでしょう?
かといって何かいい手があるかというと”?”ですけど』
って書いているのに、
『潔い方法とやらは、メモリの再確保に関してSTL以上に簡潔に書けるの?』
って反論するかよふつう。完全に論点をはずしているんだよね。
問題を論理的かつ的確に見極めるのもプログラマの能力のうちだよ。
0342名前は開発中のものです。
04/03/29 16:19ID:ZUeEszIyそこで「本当の論点は何か?」を書かないくせに、
やたらと「論理的・的確な」という言葉を濫用するのも
プログラマの能力って奴ですか?
0343名前は開発中のものです。
04/03/29 16:31ID:bi8ippWh>プログラマの能力って奴ですか?
煽りの能力です(文章の荒れ具合を見るともしかしたら天然なのかも知れないけど)。
0344名前は開発中のものです。
04/03/29 17:28ID:I5CAVnSY>予測として余分にリザーブしてある領域を超えると、とてつもない
>メモリー帯域の浪費が起こる。
解決方法は、
>かといって何かいい手があるかというと”?”ですけど
そして
>最初っからないほうが潔いんじゃないかって考えたりします。
という、とんちんかんな結論を出すと。
どうしても必要な場合に、いちいち再確保と転送を自分で書くよりは、
テンプレートを使って自動的にやってくれた方が楽でしょ?
それだけの話なのに、いったい何が言いたいのか、
>論点
がさっぱり見えない。
0345名前は開発中のものです。
04/03/29 17:37ID:I5CAVnSYlistを使うと断片化が起こる。
かといって何かいい手があるかというと”?”ですけど
だったら最初から使わない方が潔いのでは?
論点はこれでOK?
0346名前は開発中のものです。
04/03/29 17:58ID:bi8ippWh>iteratorもキモイですね。[]オペレーターもキモイです。
>かといってキモさを払拭するために、ジェネリックにする事が存在理由になっている
>スパゲッティコードを読むきはおきません。それは怠惰がゆえかもしれませんが、
つまり愚痴が言いたいだけ、と。
0347名前は開発中のものです。
04/03/29 19:24ID:htU9rKwG>だったら最初から使わない方が潔いのでは?
そうそれを言ってんの。やっと言っている事を判ってくれたね。
リストなんかだったらさ、
typedef struct _tagWhatever
{
struct _tagWhatever* next;
struct _tagWhatever* prev;
...
public:
void insert( _tagWhatever* pElem );
void remove( _tagWhatever* pElem );
...
} whatever;
でいいわけさ。
別にSTLを否定しているわけでもないよ。
ただ、そのヒープの原理上、どうしてもSTLの利点が生ききらない
よなって愚痴っているだけ。
それを、「設計上の問題をSTLの問題に摩り替えている」とかいうから
なんなん?って思うわけよ。
0348名前は開発中のものです。
04/03/29 19:41ID:3c6HG4oCおまえの考えている「STLの利点」って何よ?
0349名前は開発中のものです。
04/03/29 20:17ID:I5CAVnSY>typedef struct _tagWhatever
断片化が解決されるわけでもなく、手間がかかるようにしか思えないのに、
これを型ごとに毎回書く利点は?
0350名前は開発中のものです。
04/03/29 20:50ID:htU9rKwG>断片化が解決されるわけでもなく
基本的には、そうだ(文脈的に無視しちゃっていいが、厳密には、
STLでも一要素単位でヒープ領域が割り当てられるわけじゃない)。
>これを型ごとに毎回書く利点は?
型は関係ないよね。もし問題にするなら汎用コンテナの問題を挙げてくれよ。
templete = STLじゃないよ?わかってんのかな?
Listに限った、コンテナの再利用でいうなら、これでいいわけ。
templete < typename T >
class CList
{
CList* next;
CList* prev;
T CONTAINER;
public:
void insert(...);
void remove(...);
};
ってやりゃいい。
0351名前は開発中のものです。
04/03/29 20:53ID:I5CAVnSYそれでわざわざ自分で実装する利点の説明は?
0352名前は開発中のものです。
04/03/29 21:17ID:htU9rKwG>それでわざわざ自分で実装する利点の説明は?
仕組みを理解している人間だったら、そんなの訊くまでもないでしょ。
STLはvector, list, setなどのデータ構造間の汎用性を追求している
がための複雑さとオーバーへッドがある。
って、1から10まで書かんとわからんか?
っていうか、確かに煽り半分で書いた事は書いたが、それは
プロが出てきて有意義な話ができるかなと期待したんであって、
こんな意味のない話をしたかったわけじゃないんですが。
もうやめましょうこれ。時間の無駄です。
0353名前は開発中のものです。
04/03/29 21:23ID:izxLwDgdお願いですから、まだ逃げないでください。
0354名前は開発中のものです。
04/03/29 21:29ID:I5CAVnSY独自のアロケーターを内蔵しているSTLに、
>>350のソースで勝ち目があるようには思えない。
コードの質を落とした車輪の再発明なら、
>もうやめましょうこれ。時間の無駄です。
確かにその通り。
0355名前は開発中のものです。
04/03/29 21:41ID:BJ/4An5bツールならがんがん使うんだが・・
0356名前は開発中のものです。
04/03/29 21:48ID:izxLwDgdデータ量の上限を設定して、想定した範囲内に収めるように作ると思います。
0357名前は開発中のものです。
04/03/29 22:01ID:xV6Fcr2Y0358名前は開発中のものです。
04/03/29 22:30ID:htU9rKwGちょっとはSTLのコードを読んでからモノをいおう。
>>354
文脈考えてね。「型ごとにlistクラス」つくんのかよって言われたから、
テンプレートつかってlistコンテナをこうやって組むんだよって
サンプルを書いたんだろうが。
>>354
>独自のアロケーターを内蔵している
newオペレーターオーバーライドだろ。
そんなの実装するの当たり前じゃん。
その他、find,sort等色々なメソッドも実装するよって、こんなとこに
一々書いてられるかボケ。
あのさ、おまえら人が掲示板で具体的に説明するために
ちょろっと書いた(コピペですらないよ)サンプルコードに
いちいちうるさいんだよ。
>>357
きみとなら仕事を一緒にやっていけそうだ。
0359名前は開発中のものです。
04/03/29 22:39ID:I5CAVnSYつまり結局はSTL同様、複雑になるわけなんだけど、
その車輪の再発名でSTLには無いオーバーヘッドを回避する方策は?
0360名前は開発中のものです。
04/03/29 22:55ID:izxLwDgd先生!、オーバーロードとオーバーライドの区別はついてますか?
0361名前は開発中のものです。
04/03/29 23:16ID:htU9rKwG>>341
をよめ。何回もナンカイモナンカイモオナジゴトヲイワセルナ。
>>360
タマニツカネーンダヨ。っていうか、まぁ英文C++本でも"overload"になっているがだな、
"override"のほうが現象を的確に表している。"overload"は不正確だ。
英語が堪能なオレにとってはどうしても自然な方を使ってしまうんだな。
0362名前は開発中のものです。
04/03/29 23:20ID:htU9rKwGオレのいっているオーバーヘッドは、メモリ帯域の無駄の話じゃない。
データ構造間の汎用性を持たせたことによるメソッドのオーバーヘッドの話。
0363名前は開発中のものです。
04/03/29 23:26ID:I5CAVnSYつまり、
>かといって何かいい手があるかというと”?”ですけど
何も解決しないまま、車輪の再発明だけ行うわけなのか。
それが潔いと思えるようになるのは、一生かけても難しい。
0364名前は開発中のものです。
04/03/29 23:29ID:izxLwDgd>英語が堪能なオレにとってはどうしても自然な方を使ってしまうんだな。
先生!、かなり苦しいです。
0365名前は開発中のものです。
04/03/29 23:33ID:BJ/4An5bゲームでは再利用可能なコンテナが確かに必要だが、
STLの設計はゲームに最適ではないだけの話じゃないか
ゲーム向け俺コンテナを持ち寄って
boostに寄贈ぐらいすればこのスレも役に立ったといえるな
0366名前は開発中のものです。
04/03/30 00:03ID:fcRSAwJm潔いの話題違い。
メモリバンド幅の話と、メソッドのオーバーヘッドの話がごっちゃになってるよ。
>>364
あのな、overloadとoverrideを辞書で調べてみ。
http://www.infoseek.co.jp
>>365
>馬鹿だなあお前ら、
>ゲームでは再利用可能なコンテナが確かに必要だが、
>STLの設計はゲームに最適ではないだけの話じゃないか
まぁ、そういうことだな。
0367名前は開発中のものです。
04/03/30 00:21ID:F14WhfVI0368名前は開発中のものです。
04/03/30 00:25ID:rluXyNAm何の解決方法も示めさず、言い訳で逃げ回り、
用語の誤用に関しても、素直に間違いを認めずまた言い訳。
データの汎用性のオーバーヘッドを問題にしても、
型ごとに書くのかと聞かれるとその時だけサンプルはテンプレート。
複雑さを問題にしても、機能の面を指摘されると、
STL同様の機能を実装するという。
既存のものに対して、利点は特にないけれど、とにかく自分で実装。
滅茶苦茶で突っ込みきれない。
0369名前は開発中のものです。
04/03/30 00:33ID:+WlTCBa00370名前は開発中のものです。
04/03/30 00:48ID:fcRSAwJm>結局のところ、「メソッドのオーバーヘッド」に関しても、
何の解決方法も示めさず、
メモリー最配置の時に発生するメモリバンドの無駄はどうにもならないが、
「メソッドのオーバーヘッド」に関しては、
「STLはvector, list, setなどのデータ構造間の汎用性を追求している
がための複雑さとオーバーへッドがある。」って問題提起し、
ゲーム用に贅肉を削ぎ落としたバランスの取れたコンテナをちょろっと
書けばメソッドのオーバーヘッドは軽減できるっていってんだよ。
>用語の誤用に関しても、素直に間違いを認めずまた言い訳。
Override 誤用じゃないよ。適切な英語だ。
>利点は特にないけれど
あるよ。ゲームにとっては重要な利点だよ。
シロートとは付きあいきれん。
0371名前は開発中のものです。
04/03/30 00:51ID:fcRSAwJmtry catch例外うざい。
マクロで↓みたいな例外処理いれてる。
DBG_ASSERT( bool bEval, TCHAR* szMessage, UINT uErrorType );
0372名前は開発中のものです。
04/03/30 00:51ID:F14WhfVIそれは興味深いですね。具体例をいただけますか?
0373名前は開発中のものです。
04/03/30 00:54ID:tIdFGMagテストプログラムとかツールとかじゃなくて
本当に商品でSTL使ってるのか?
どこ製のSTL?
0374名前は開発中のものです。
04/03/30 01:00ID:F14WhfVISTLport。設定マクロをたくさん提供してくれるのでいいと思います。
例外発生時の挙動や、メモリ管理の設定もいろいろカスタマイズできます。
0375名前は開発中のものです。
04/03/30 01:00ID:sI1+31eE>Override 誤用じゃないよ。適切な英語だ。
え?この場合オーバーライドがC++的にも正しくね?
で、オレは最適でないのは承知の上で楽だから使ってるよ(別にキモイとかどうでもいいし)。
クリティカルな部分だけ特別に最適なのを作る(ちうのは普通の最適化戦略だが)。
なので、別に愚痴りたくは無いかな。
愚痴りたいのは、STL使わせてもバグ埋め込むし、かといって普通にリスト構造とか作ら
せてバグを埋め込んでしまう新人君(に使わせるためのSTL)。
Effective STLシリーズを読まなきゃ使い物にならないのが一番大きいオーバーヘッドだw
0376名前は開発中のものです。
04/03/30 01:06ID:X6VmrFA0トレースとか非常にうざいんだけど、何か良い方法ある?
0377名前は開発中のものです。
04/03/30 01:08ID:JHyHUQlW>Override 誤用じゃないよ。適切な英語だ。
まぁ、君の意見は正しいと思うよ。君の世界の中ではね・・・
コウヤッテSTL厨が出来上がっていくわけか。
アセンブラ厨の言ってた事とかわらんなぁ。
何かと言うと「俺が正しい」「俺は間違ってはいない」
ヤレヤレ棚
0378名前は開発中のものです。
04/03/30 01:15ID:OjGk+Cgx0379名前は開発中のものです。
04/03/30 01:20ID:fcRSAwJmなんで書き込む前に自分で調べないかな?これで最後ね。時間のムダだし。
例えば、vectorの[]オペレータ一つとっても
vector <int> vInt;
...
int& r = vInt[idx];
とやるだけで、このようにコードが実行される(読みにくいけど長すぎるので)。
まぁ自分で調べりゃ済む事だし。
reference operator[](size_type _Pos) { // subscript mutable sequence
return (*(begin() + _Pos));}
iterator begin(){ // return iterator for beginning of mutable sequence
return (iterator(_Myfirst));}
iterator(pointer _Ptr) : const_iterator(_Ptr) { // construct with pointer _Ptr }
const_iterator(_Tptr _Ptr) { // construct with pointer _Ptr
_Myptr = _Ptr; }
0380名前は開発中のものです。
04/03/30 01:20ID:fcRSAwJmiterator begin() { // return iterator for beginning of mutable sequence
return (iterator(_Myfirst)); }
reference operator[](size_type _Pos) { // subscript mutable sequence
return (*(begin() + _Pos));}
iterator operator+(difference_type _Off) const { // return this + integer
iterator _Tmp = *this; return (_Tmp += _Off); }
iterator& operator+=(difference_type _Off) { // increment by integer
this->_Myptr += _Off; return (*this); }
reference operator*() const { // return designated object
return ((reference)**(const_iterator *)this); }
const_reference operator*() const { // return designated object
return (*_Myptr); }
reference operator[](size_type _Pos) { // subscript mutable sequence
return (*(begin() + _Pos)); }
0381名前は開発中のものです。
04/03/30 01:20ID:fcRSAwJmreturn (iterator(_Myfirst)); }
iterator(pointer _Ptr): const_iterator(_Ptr) { // construct with pointer _Ptr }
const_iterator(_Tptr _Ptr) { // construct with pointer _Ptr
_Myptr = _Ptr; }
iterator(pointer _Ptr) : const_iterator(_Ptr) { // construct with pointer _Ptr }
iterator begin() { // return iterator for beginning of mutable sequence
return (iterator(_Myfirst)); }
reference operator[](size_type _Pos) { // subscript mutable sequence
return (*(begin() + _Pos)); }
iterator operator+(difference_type _Off) const { // return this + integer
iterator _Tmp = *this; return (_Tmp += _Off); }
iterator& operator+=(difference_type _Off) { // increment by integer
this->_Myptr += _Off; return (*this); }
reference operator*() const { // return designated object
return ((reference)**(const_iterator *)this); }
const_reference operator*() const { // return designated object
return (*_Myptr); }
以上。
0382名前は開発中のものです。
04/03/30 01:27ID:OjGk+Cgx0383名前は開発中のものです。
04/03/30 01:28ID:fcRSAwJm>で、オレは最適でないのは承知の上で楽だから使ってるよ(別にキモイとかどうでもいいし)。
>クリティカルな部分だけ特別に最適なのを作る(ちうのは普通の最適化戦略だが)。
だね。オレもそう。STLの問題点がわかってりゃ適材適所で使いこなせるってことだな。
0384名前は開発中のものです。
04/03/30 01:32ID:NFwNOG+Iマルチスレッドで使うとロックコードが入るだけ。
0385名前は開発中のものです。
04/03/30 01:35ID:OjGk+Cgxtemplateの利点のひとつだしね(メタプログラミングというのか?)
STLなんかも、もろコンパイラの最適化前提。
0386名前は開発中のものです。
04/03/30 01:37ID:fcRSAwJm自分で調べてみなって。上のCコードどおり最悪なことになっているから。
ちなみに普通の配列だったら4stateくらいで済む話です。
0387名前は開発中のものです。
04/03/30 01:39ID:OjGk+Cgxいや、調べてみていってるんだが。
最適化を掛けなきゃすごいことになったが、掛ければ配列と変わらなかったけど。
ちなみにgccの-O2で確認。
0388名前は開発中のものです。
04/03/30 01:42ID:F14WhfVIおつかれさまでした。
ちなみに、STLportのHEADでは、
reference operator[](size_type __n) { return *(begin() + __n); }
iterator begin() { return this->_M_start; }
_Tp* _M_start;
以上(@stlport/stl/_vector.h)でした。
そういうことなので、貼っていただいたモノはSTLのオーバーヘッドの具体例とはいえませんね。
おそらく、「中途半端な理解による誤解」でしょう。
STLportの使用をお勧めしますよ。
0389名前は開発中のものです。
04/03/30 02:45ID:fcRSAwJm>>385
>全部インラインになって最適化されるとかなり効率的なコードになるってのが
>templateの利点のひとつだしね(メタプログラミングというのか?)
templateの利点?実行コードの話だよね?
効率的なコードになるのはinlineの利点であって、templateとは関係ないが。
templateはむしろ、複数の実体が生まれるっていう副作用以外、コード効率への影響はない。
>>387
>掛ければ配列と変わらなかったけど。
それはありえないね。
>>388
それじゃまだ甘い。まず+オペレーター部分が抜けてるでしょ?
そして+オペレーターから更に続くわな。
その字面通りだったら、char型でもない限り、まともにアドレスとれないよ。
トレースしてみ、ほかにも呼ばれるものがいっぱいあるよ。
字面ほど単純じゃないのがSTL。
0390名前は開発中のものです。
04/03/30 02:52ID:JHyHUQlW>それはありえないね。
・・・こいつには何を言っても無駄かと。
久々に真性のヴァカを見たよ。
0391名前は開発中のものです。
04/03/30 03:09ID:F14WhfVIあーすいません。抜けてましたね。
typedef valute_type* iterator;
typedef valute_type& reference;
ということで、続く + も * も、共に組み込み演算子ですよ。
0392名前は開発中のものです。
04/03/30 03:22ID:TrwYR1M1えっと、Cの基本が全く分かってない人ですか?
0393名前は開発中のものです。
04/03/30 06:37ID:NUfc9Rms00000a1 00 00 00 00 mov eax, DWORD PTR ?idx@@3HA ; idx
000058b 0d 04 00 00
00 mov ecx, DWORD PTR ?vInt@@3V?$vector@HV?$allocator@H@std@@@std@@A+4
0000b8d 04 81 lea eax, DWORD PTR [ecx+eax*4]
; 15 :
0394名前は開発中のものです。
04/03/30 07:04ID:SghGZQph0395名前は開発中のものです。
04/03/30 07:29ID:rluXyNAm・間違えても言い訳はせず、素直に認めることは大切。
・あり得ないと決めつける前に、自分で確かめることも大切。
0396名前は開発中のものです。
04/03/30 09:44ID:DwcoFR6t0397名前は開発中のものです。
04/03/30 09:56ID:OjGk+Cgx>効率的なコードになるのはinlineの利点であって、templateとは関係ないが。
型の安全性を保ちつつマクロのようなことが出来るという意味で、両方だよ。
テンプレートメタプログラミングって聞いたこと無い?
(そして、そこがC++の汚さなわけだが。。。)
0398名前は開発中のものです。
04/03/30 13:17ID:NFwNOG+Iそのうちシンボルの長さの分非効率って言い出すからよろしく
0399名前は開発中のものです。
04/03/30 16:17ID:DlN5YGl10400名前は開発中のものです。
04/03/30 17:58ID:K6BdNsKiおまえら知らないかもしれなが、STLがサポートされてないCPPがアルンデスヨ。
0401名前は開発中のものです。
04/03/30 18:07ID:DJnJzXcX世の中には malloc も無い C コンパイラもあるが、
そこら辺、どうよ?
0402名前は開発中のものです。
04/03/30 21:00ID:OjGk+Cgx0403名前は開発中のものです。
04/03/30 21:02ID:HrX2ydbg0404名前は開発中のものです。
04/03/30 21:29ID:OjGk+Cgx・・・・あれ?
0405名前は開発中のものです。
04/03/30 22:01ID:se3a2dchlist map vector 程度だし、使ってるメソッドもごく一部。
それらを網羅するだけのテンプレートなら、自作してしまったほうが
なにかトラブルがあったときに対処しやすいかも。
パチンコ系の仕事だと、メモリ少ないし、C++は使えるけどSTLは
使えないなんて環境がザラなので、自作するですよ。
ま、昨今のPS2の3Dゲーが普通な世間についていけなくてスピンアウトした
負け組みな自分の意見など参考にならんかもしれんけど。
でも、ゲーム用途で使用するSTLのメソッドなんて、やはり片手で
数えれる程度なんではないでしょうかねぇ?
標準でSTLが添付されているなら迷わずそちら使うんですけど
0406名前は開発中のものです。
04/03/30 22:29ID:yJ2AWd9P0407名前は開発中のものです。
04/03/30 23:07ID:NFwNOG+I使う人間がどうか、どんなゲームを作るつもりなのかの方が何十倍も影響する
0408名前は開発中のものです。
04/03/30 23:30ID:OjGk+Cgx0409名前は開発中のものです。
04/03/30 23:53ID:S0+3h4vNみたいな見方しかしてない椰子がたくさんいるような気がするのは
俺だけなのだろうか
0410名前は開発中のものです。
04/03/31 00:27ID:TBla2Lpvぜひ、そうじゃないと言う意見を教えて欲しい。
実際のところコンテナ集程度の認識でしか使えていないので・・・
■ このスレッドは過去ログ倉庫に格納されています