[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/05 14:43 / Filesize : 200 KB / Number-of Response : 965
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

D言語 Part18



1 名前:デフォルトの名無しさん [2008/04/14(月) 15:16:22 ]
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)

116 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 02:28:55 ]
>>115
dHellってdHell2じゃなくて?
無印の方はSDLとほぼ同等だと思ってたが

システムハンガリアンだったらダメ絶対
アプリケーションハンガリアンだったら推奨
ameblo.jp/argv/entry-10031517216.html

117 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:01:33 ]
アプリケーションハンガリアンもtypedefがあるからあまり必要無いんじゃない?

118 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 11:48:18 ]
>>117 え?

119 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 12:21:11 ]
>>118
Cとかと違って,違う型として扱ってくれるからじゃない?
全て上手く行くかどうか分からないけども

120 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:57:22 ]
データの目的を変数名に入れなくても、typedefで型のほうを目的固有にできるって話じゃね。

ttp://www.radiumsoftware.com/hungarian_notation.html
この例なんかは、安全な文字列型と危険な文字列型を用意すれば解決するようにも思える。

121 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:29:48 ]
>>120のリンク先では「(C++で)いちいちウィンドウ座標とレイアウト座標を
別のクラスにするのは大仰すぎて非現実的だからアプリハンガリアンがいいよね」
と言いたいようだけど,ただ視覚に訴えかけるだけじゃなくて
それぞれを暗黙的に変換されないようにするべきだと思う.

typedefがあるD言語では仕組みは簡単だし
実は同じ型だから変換のコストは安いからもってこい
typedef Point LayoutPoint;
typedef Point WindowPoint;
とか
typedef /*unsafe*/string safeString;
とか.
D言語ではアプリハンガリアンでさえいらず型システムに任せられる気がしてきた

122 名前:117 mailto:sage [2008/04/30(水) 17:31:07 ]
>>118
すまん言葉足らずだった
>>119-120が言っている通り
なるべくならコンパイルエラーで検出できるようにした方が間違いが無いだろうし
オーバーロードが出来るから処理も分けやすい

全てのケースで置き換えられるとは言わないけど
大体はtypedefが使えると思う

123 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:40:46 ]
文字コード別に文字列型を定義してしまっても良い気がする。

124 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:29:26 ]
>>123 こんなのはしてみたけど
typedef char mbchar;
alias invariant(mbchar)[] mbstring;
文字列同士の連結に ~ じゃなくて連結関数を使わないといけないのがネックだった



125 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:42:24 ]
ただの配列だから~演算子で連結できるだろ

126 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:44:23 ]
>>124
charは既にUTF8って意味を持ってるから、ubyteを基底にするべきだろうね。

127 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:04:38 ]
配列でptrを使わずに&演算子で出てくるのは配列の最初の要素へのポインタと配列の長さを格納した8バイトのデータ?

128 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:21:27 ]
>>125
あ,ゼロ終端の配列にするからいけないのか thx
>>126
間違えた.元々 ubyte にしてました

129 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:25:35 ]
>>127
&演算子が返すのは、配列の参照が保持されている場所のアドレスか、
配列の先頭の要素のアドレス。動的か静的かで挙動が異なる。

130 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 21:15:10 ]
>>116
すまん、dHell2の方だった
アプリケーションハンガリアンってあるのか・・・
システムハンガリアンしか知らなかった・・・thx!!

131 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 21:59:30 ]
>>114
なるほど

132 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 22:43:31 ]
>>122
なるほど、得心しました。
単純にアプリケーションハンガリアンはレビュアーの為でもあるんでそっちまで否定されてるのかと思い込んでました。

133 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 07:09:09 ]
>>124
文字列型はinvariant(char)[]でもう確定なのかな
せめて一段aliasがあればな…

ていうかWindowsでUTF8が(ry

134 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 10:37:10 ]
ところで、charがUTF-8の文字という意味を持っているなら、
なんで、toMBSzとかはchar*を返すんだ?
ubyte*を返すべきなんじゃないか?



135 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:11:56 ]
まったくその通りだと思います

136 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:05:51 ]
D はじめますた。
winxp で eclipse + descent + dmd 1.028 + dsss 最新版 + ddbg 最新版で
なんとかコーディング → ビルド → デバッガが走るという、IDE の最低限要素を実現出来たばっかり。

で、
import std.stdio;
void main() {
 printf("test");
 printf("hello, D");  // この行にブレークポイント
}
このコードでブレークポイントの部分で止まったときに
eclipse のコンソールに、標準出力に出力されたであろう test って文字列が出てこない。
出てこさせる方法は無いですか?


137 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:22:47 ]
fflush(stdout);

138 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:26:06 ]
>>136-137
std.stdio.flushall();
てのなかったっけ

139 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:32:06 ]
>137
>138
出てこないみたいです。

140 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 16:49:44 ]
あーーーわかりますた。

標準出力用のコンソールが、eclipse の外のウィンドウで出てたです。
気がつかなかったー。

141 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 17:36:59 ]
ワラタ


142 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 20:25:08 ]
>>136
その実現する過程をぜひ教えてほしい・・・

143 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:28:47 ]
eclipse は元から入ってました。

で、descent を入れました。
eclipsewiki.net/eclipse/?D%B8%C0%B8%EC%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3

コンパイラが別途必要なのを気がつかなくて入れてなかったので、
あとから dmd と dmc をいれました。ふつうはルートに展開するらしいけど、ルートが嫌だったので、c:\d に展開。
->c:\d\dmd
->c:\d\dm
dsss を入れます。
->c:\d\dsss
ddbg を入れます。
->c:\d\ddbg

パスを設定します。
DMD_HOME=c:\d
PATH=〜〜〜〜;%DMD_HOME%\dmd\bin;%DMD_HOME%\dm\bin;%DMD_HOME%\dsss\bin;%DMD_HOME%ddbg\bin;

コンパイラの設定。
eclipse で ウィンドウ>設定 を開いて、ツリーから、D -> Installed Compilers を選択
追加を押して、Compiler home directory に、dmd を展開したディレクトリ(c:\d\dmd) を設定
すると、他の情報もなんだか良い感じに設定されているので、おもむろに OK

デバッガの設定
www.dsource.org/projects/descent/wiki/DebuggingPrograms


144 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:38:59 ]
ビルダーの設定
D のプロジェクトのプロパティを開いて、ツリーから ビルダーを選択
新規ボタンを押して、プログラムを選択して、OK
メインタブーーーーーーーーーーーー
ロケーション:c:\d\dsss\bin\dsss.exe
作業ディレクトリ:${project_loc}
引数: build
更新タブーーーーーーーーー
完了時にリソースを更新をチェック
選択されたりソースを含むプロジェクトを選択
再帰的にサブフォルダーを組み込むをチェック
おもむろに OK

dsss のコンフィグ
D のプロジェクトのディレクトリに、dsss.conf を作成。
[main.d]                   // ← main() を含むソースファイル
buildflags=-g -Isrc\\   // ← コンパイラに渡すオプション


だいたい、こんなかんじです。



145 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 23:44:39 ]
乙です

146 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 06:26:21 ]
>>143-144
うわ、ありがとう!!

147 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 18:23:04 ]
Descent ver あがってるね。

148 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 19:33:18 ]
型タプルの各型の文字列表現が欲しいんだが可能でしたっけ?

149 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:10:02 ]
stringof プロパティを使えば出来るかと
ttp://www.kmonos.net/alang/d/2.0/property.html

動作例 これでいいのかな?
ttp://codepad.org/7jPFcZXj

150 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:44:48 ]
>>148じゃないけど…おれもちょっとそれは悩んでたことがある。結局あきらめたけど。
>>149
ttp://codepad.org/JLIVZDYF
こんな感じに、モジュール名まで考えたときに stringof だと都合が悪いんだよね…
mangleof と demangle でいけないかと思ったけど、これもなんかうまくいかないし…
どうすればいいんだろう?

151 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 23:24:11 ]
1.0から0.2を5回引いても0にならないのはどうにかならないんでしょうか・・・。

152 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 23:37:42 ]
面倒でも整数で

153 名前:149 mailto:sage [2008/05/02(金) 23:40:14 ]
>>150
うーん、確かに半端だ…
.NET Framework の Type.Fullname プロパティ相当のものが
現在のD言語には用意されていないようなのが不味いのかな。

154 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 00:19:06 ]
>>151
浮動小数点数がどういうものかを勉強しろ。



155 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 00:33:29 ]
Dの浮動小数点数ってずいぶん貧弱なんですね

156 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 00:37:58 ]
>>148
stringof はタプルに対しても使える。
モジュール名は実行時でも良いなら typeid で取れるね。

157 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:16:37 ]
>>155
Dの・・・?

158 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:24:55 ]
あちこちで春ですよ

159 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:36:59 ]
さすがに>>155には失笑した

160 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:48:20 ]
>>155はとりあえず基本情報処理技術者の資格を取ってきなさい

161 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 01:51:09 ]
>>155
今まで使ってきた言語を示すべし

162 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 02:25:19 ]
PythonのDecimalみたいなのがあれば良いんじゃない

163 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 02:51:49 ]
>>162
Decimalはライブラリ(というかモジュール?)だから組み込みどうしではPythonも同じじゃない?
標準で入れるべき,となるとまた別な問題な気がするけど,dsourceとかにあるのかなぁ

164 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 10:30:41 ]
Dの10進浮動小数点数ライブラリはまだ見たことはないな
まあ、欲しい奴が移植すればいいだろう



165 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:22:40 ]
>>155はMatlabとかMathematicaとか使ってたんだろ。

166 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:37:18 ]
C#は1.0から128bitDecimal型標準装備だな

167 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 09:46:12 ]
>>143-144に刺激されて、Eclipse&Dscentいれてみたが、
VSのMakeプロジェクト、asm{ int 3;} に慣れすぎていた自分がいた・・・

168 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:02:20 ]
仕様で見つけられないので質問です。(1.0 の仕様しか見てませんけど)

クラスメンバーのアクセス制限属性(private とか protected とか)は、
記述したらそのアクセス制限が適用されるのはわかるのですが
記述しなかった場合、どのアクセス制限が適用されるのかご存じのかた居ませんか?

とりあえず試した限りでは public っぽいのですが・・・。

169 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:23:20 ]
www.kmonos.net/alang/d/2.0/struct.html
デフォルト publicだよ

170 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:25:48 ]
あ、ごめん2.0のURL出しちゃったけど1.0系でも同じだよ

171 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:43:51 ]
・・・これで判れというのもなかなかシビアなものがある。>DigitalMars

どもありがとうございました〜

172 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 08:12:45 ]
>>これで判れ
Dは初心者向けじゃなくて今までの言語との比較が基本だから仕方ない気もしてたり

173 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:46:47 ]
poseidonがなんか少し新しくなってる

174 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 01:35:34 ]
>>171
ttp://rayerd.ddo.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%A4%CB%C8%E8%A4%EC%A4%BF%BF%CD%A4%CED%B8%C0%B8%EC#ba92f204
比較したいならこっちをどうぞ



175 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 01:38:46 ]
[poseidon diff]
www.dsource.org/projects/poseidon/wiki/WikiStart?action=diff&version=31

[descent diff]
www.dsource.org/projects/descent/wiki/WikiStart?action=diff&version=65

176 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 04:51:01 ]
>>149
ありがとうございました。
おかげさまで>106もどきができたのですが、
長いのでここに貼るのはどうかなという感じのものです。
codepadはたぶんコンパイラのバージョンの違いで通りませんでした。

177 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 20:37:53 ]
dflのListViewってハンドル取れないようになってないかい?

178 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 09:39:00 ]
ハンドルって何のこと

179 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 12:09:55 ]
キャンドル♪ハンドル♪ペダルにサドルに自♪転♪車♪漕いどる♪

180 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:44:31 ]
Windows的にいえば、Windowハンドルじゃないかい?

しかし、懐かしいもんひっぱってきたねぇ。>>自転車
意味的にはハンドルはどっちも同じだったと思うけど。

181 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 18:50:38 ]
デバイスコンテキストハンドル

182 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:10:34 ]
久しぶりにdflのサイト覗いてみたけど、3月中旬にD2対応してたんだね。
そろそろD2に移行しようかな
ttp://wiki.dprogramming.com/Dfl/Snapshots

183 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:04:49 ]
>>182
あれ?どうやったらD2で使えるんですか?

184 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:26:32 ]
ttp://wiki.dprogramming.com/Dfl/D2-0
まだ対応してないとも書いてるけど



185 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:01:43 ]
うちの環境がおかしいだけでできるみたいです

186 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:32:15 ]
インストールして普通に動いたよ@v2.013

>>184
スナップショットのほうで対応してるってことかと。

187 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:09:11 ]
なんでpathが通ってないのにdfl.exeは
c:\d2\dmd\bin\dmd.exeじゃなくて
c:\d\dmd\bin\dmd.exeの方を使おうとしてくれるのだろうか orz
c:\d を c:\_d に改名したら普通に動くのに・・・
どこかに設定が残っているのでしょう?

188 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:15:56 ]
多分わかった
両方のバージョンを入れていて競合する人はdfl.exeを使う前に
dfl -i
を実行してやればいいみたいだ

189 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 00:29:43 ]
>>179
会いに来て荒♪井♪注♪

190 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 07:28:43 ]
DFLでつかえるコントロール一覧のスクリーンショットってなかったっけ

191 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:24:34 ]
ttp://www.dprogramming.com/dflscreenshots.php

192 名前:デフォルトの名無しさん [2008/05/09(金) 22:01:09 ]
dmd1.029
class Test
{
int[string] x;
void a(Test* t){assert("hello" in t.x);}
Test* b(){return &this;}
}

void main()
{
Test t = new Test();
t.x["hello"]=1;
t.a(t.b); // Error: Access Violation
}

ナゼ?

193 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:48:28 ]
Test#b はローカル変数のアドレスを返してるようなもんだと思うんだけど

194 名前:192 [2008/05/10(土) 01:38:42 ]
>>193
確かにTest#bを
Test* b()
{
static Test c;
c = this;
return &c;
}
にすると解決
ただ、なんとなくいまいち泣希ガス
意図としては関数bには&tを返してほしいんだが、そういうのはワガママ?



195 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 01:49:12 ]
そんなの無理だろ。
オブジェクトを値渡ししてるのに

196 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 01:54:47 ]
もともと参照だしそれって意味あるの?

197 名前:192 [2008/05/10(土) 02:18:39 ]
ああ、そういえばそうか。
根本的なことわすれてるなおれ。

別方法で打開しました。おさわがせ。

198 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 02:55:09 ]
class Test
{
int[string] x;
void a(Test t){assert("hello" in t.x);}
Test b(){return this;}
}

void main()
{
Test t = new Test();
t.x["hello"]=1;
t.a(t.b);
}

これじゃ駄目だったの?

199 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 03:51:49 ]
C++使ってたから俺も混乱した

200 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:35:18 ]
Dも、C#みたいに型省略宣言入れてくれよ。

201 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:36:25 ]
autoで我慢しなせぇ。

202 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:11:02 ]
>>200 どんなの?

203 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:19:29 ]
匿名型のことかな

204 名前:202 mailto:sage [2008/05/10(土) 22:45:05 ]
これか?
void main(){
    auto x = new class {int a; string b;};
    x.a = 1;
    x.b = "hoge";
}




205 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:56:52 ]
auto x = new class {int a; string b;};
auto y = new class {int a; string b;};

Dだとxとyが同じ型にならないのがだめだな。

206 名前:202 mailto:sage [2008/05/10(土) 22:59:05 ]
まあそういう仕様だわなあ
同じ型がいい理由ってどんなんがあるの?

207 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:00:45 ]
ん・・・あれ?
行頭のスペースが残ってる
for(;;){
    writefln();
}

208 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:05:14 ]
>>206
配列に突っ込みたいときとか

209 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:31:08 ]
てs

210 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 05:34:08 ]
  だろ?

211 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 08:00:40 ]
うーんLINQみたいな応用があれば
匿名型は有意義なんだろうけど今のままならあんまりかなあ
匿名型のTupleを可変長テンプレートの引数に与えるとかで代用できないのか

212 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:00:31 ]
>>191
ありがとう〜

213 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:33:31 ]
連想配列asにキーkeyのものがあるかどうかを調べて、
なければ作成する
auto p= key in as;
if( p is null ) {
 as[key]= A()
 p= key in as;
}
っていうのがめんどくさいので、過去スレ参考にして以下みたいなのを
つくってみた
template key_type(T)
{
 static if(is(T A:U[A],U)) { alias A key_type;}
}

template return_type(T)
{
 static if(is(T A:U[A],U)) { alias U return_type; }
}

return_type!(T)* has(T)( ref T as, key_type!(T) key)
{
 auto p= key in as;
 if( p !is null ) return p;
 static if( is(return_type!(T):Object) ) {
  as[key]= new return_type!(T)();
 } else {
  as[key]= return_type!(T)();
 }
 return key in as;
}

214 名前:213 mailto:sage [2008/05/12(月) 20:41:00 ]
auto p= has( as, key)
p.MEMBER= VALUE;
って感じです。
こうやったほうがいいぜ、とかご意見ありましたらm(_ _)m



215 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:42:16 ]
V* has(K, V)( ref V[k] as, K key)

とかじゃあかんの。

216 名前:213 mailto:sage [2008/05/12(月) 23:46:32 ]
がーーーーん






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef