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


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

D言語 Part34



1 名前:デフォルトの名無しさん mailto:sageteoff [2015/01/25(日) 12:07:29.52 ID:gAd5OZDm.net]
プログラミング言語 D (D Programming Language) について語るスレッドです。

■本家
dlang.org/ - 公式(英語)
www.kmonos.net/alang/d/ - 公式の和訳 (やや古いので注意)
https://issues.dlang.org/ - D言語バグ報告
https://github.com/D-Programming-Language - D言語開発リポジトリ

■Wiki
wiki.dlang.org/ - 公式Wiki
dusers.dip.jp/ - D言語友の会(日本語フォーラムあり)

■プログラミング言語D (TDPL: The D Programming Language)
Andrei Alexandrescu 日本語版
www.shoeisha.co.jp/book/detail/9784798131108

ソース貼付サイト dpaste.dzfl.pl/
<$><$> https://www.bountysource.com/trackers/383571-d-programming-language

■前スレ
D言語 Part33
toro.2ch.net/test/read.cgi/tech/1396145538/

■過去スレ、関連スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000

237 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:14:53.57 ID:2BMWd/g5.net]
2.068.2 出てた

ちなみに Win32-COFF が隠しオプション(-m32mscoff)で出来るようになってるので
OMF/optlink がイケてないと思っていた諸兄は試してみるがよいよいよい

238 名前:デフォルトの名無しさん mailto:sage [2015/10/01(木) 21:28:45.14 ID:S1ELEwjTE]
64bitも隠しオプションだったよね

「コンパイラのソースくらい当然読んでるよね?」ってことなんだろうか…

239 名前:デフォルトの名無しさん mailto:sage [2015/10/04(日) 20:25:42.92 ID:fx9NWY8o.net]
int arr[x][y][z];
これと同じメモリレイアウトでヒープに確保するにはどうすればいいですか?

240 名前:219 mailto:sage [2015/10/04(日) 20:56:03.94 ID:fx9NWY8o.net]
new int[x*y*z]でよかった。
問題なのはint[]のメモリへのアクセスをint[x][y][z]と同じようにする方法だった。

241 名前:219 mailto:sage [2015/10/04(日) 20:59:30.10 ID:fx9NWY8o.net]
自己解決。
[0][0][0],[0][0][1]...[0][1][0],[0][1][1]...の順番で並んでるだけだった。

242 名前:デフォルトの名無しさん [2015/10/06(火) 01:18:13.90 ID:4WYMUnp4.net]
くっそ!
↓Manifest ConstantsのenumとAAのからみがおかしい。
dpaste.dzfl.pl/36ab529d6fc5c
↓CTFEで変数を修飾する方のscope class使うと abnormal termination
dpaste.dzfl.pl/8ad7e24e5d05

243 名前:デフォルトの名無しさん [2015/10/09(金) 21:58:55.85 ID:So4fPMkx.net]
const class A { int a; this(int v) { a = v; } }
このクラスAを値に持つ連想配列を作りたいんだけど、

const(A)[int] hoge = [1: new const A(1)];
hoge[3] = new const A(3); // cannot modify const expression hoge[3]
みたいに、初期化はできても代入ができない。

A[int] hoge = cast(A[int])[1: new const A(1), 2: new const A(2)];
hoge[3] = cast(A)new const A(3);
てなふうにcastしたら回避できたけど、なんか美しくない。
typeof(new const A(1)).stringof == "const(A)" なのがおかしい気がするんだが。

244 名前:223 mailto:sage [2015/10/09(金) 23:28:50.19 ID:So4fPMkx.net]
書き込んでから思い出したけど、Rebindableとかできて結構経つしあきらめるしかない気がしてきた。

>>229 optlink死んでまうん?

245 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 00:27:09.81 ID:MYHuAGIQ.net]
const classとかscope classとかは今もまともに使おうと思えないね
普通のclass内でメンバをconstにするとかじゃないとまともに動く気しない



246 名前:デフォルトの名無しさん [2015/10/15(木) 18:54:50.42 ID:pJRyZOgY.net]
nullではなく、空の連想配列で初期化するにはどうすればよいですか?

247 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 08:36:04.34 ID:CAVKRc42.net]
空の配列 == null なので無理

ただし空文字列 "" は例外 落とし穴になりがちなので注意

248 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 13:11:04.24 ID:TDfNRPC3.net]
ちょっと良くわかりませんが、D言語は空の配列すら作れないんですか?
不便ですね

249 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 17:46:08.84 ID:ZZ3JoxKg.net]
nullでない空ってなに

250 名前:デフォルトの名無しさん [2015/10/16(金) 17:54:55.90 ID:MCgyDKhx.net]
a = {};

こんなのを期待してるのかな

251 名前:226 [2015/10/16(金) 18:32:37.08 ID:+5uWvhRc.net]
>>239-242 レスありがとう。やりたかったのはこういうことです。

string[string] buf;
auto buf2 = buf;
buf2["hello"] = "world";
buf.writeln; // > []

これと↓

string[string] buf = ["": ""];
buf.remove("");
auto buf2 = buf;
buf2["hello"] = "world";
buf.writeln; // > ["hello":"world"]

では結果が違うわけだけど、後半の上2行を初期化1行で書きたいな。
という話でした。

252 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 19:36:08.03 ID:TDfNRPC3.net]
結局どういうことなんですか?
Dでは空の配列を作れないんですか?
必ず何か入っていなければダメなんですか?
int[] a; って書けば空の配列になるんじゃないんですか?

253 名前:226 mailto:sage [2015/10/16(金) 21:04:57.54 ID:+5uWvhRc.net]
>>244
int[] a; で空の配列になりますよ。
226のは「連想配列」が俺にはややこしいっていう話です。

254 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 21:47:10.30 ID:BcAfRt/g.net]
>>243
string[string] buf = (a => (a.remove(""), a))(["" : ""]);

ところで、コンマ演算子を廃止しようとか言ってたのは自然消滅したのか?

255 名前:226 [2015/10/16(金) 22:51:07.22 ID:GwISFyO6.net]
>>246 ありがとうございます。ところでもっと基本的な疑問がわいたのですが、
>>243 の後半での、bufとbuf2の中身がずっと同じであるっていうのは、仕様で保証されてるんでしょうか?
Windows版dmd2.068.2では、1000個値を追加しても同じでした。



256 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 09:05:55.54 ID:M7lcZRBS.net]
>>243
バグっぽい removeしつくしたら null になってるはずなんだけど

257 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 09:08:29.29 ID:M7lcZRBS.net]
それに連想配列の内部実装は最近まで大きく書き換えられてて
動作の微妙な違いとかあるのでトリッキーなことは避けるべき

258 名前:226 [2015/10/17(土) 22:20:49.79 ID:KpZ8gQf0.net]
>>248-249 そうなんですね。書き換えます。ありがとうございます。

259 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 00:01:18.64 ID:wy5QxwnK.net]
リンクエラー。2.067.1では通ってた。
dpaste.dzfl.pl/255495e7489a
1. -m64 で
2. CTFEで実行されるラムダ内で定義されている
3. 配列をメンバに持つ構造体の
4. 配列のconcatを行う

260 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:35:23.39 ID:WlXBpB56.net]
↓CTFEでtoHash/opEqualsが効いてない。
dpaste.dzfl.pl/ec40b544f45d
CTFEはまだまだなかなかナヤマシイな! >>249 がらみかしらん。

261 名前:デフォルトの名無しさん [2015/10/28(水) 16:43:28.27 ID:w9dndjrH.net]
D言語って、Javaみたいにソースファイル名とクラス名を同じにしてしまうと、
他のソースでクラス名のつもりで記述したものがパッケージ名扱いになってしまうため
Hoge.Hoge のように同じ名前を2回書かないとクラス名と解釈してくれないと思うのですが、
これを1回だけの記述で済ましたい場合、皆さんはどのように解決されているんでしょうか?
ソースファイル名を変えるのもmodule文で別名にするのも、何か違うように感じてしまいます。

262 名前:デフォルトの名無しさん mailto:sage [2015/10/28(水) 19:24:28.95 ID:9zUX3+we.net]
モジュール名とファイル名は小文字
クラス名は大文字始まり
それでもカブるようなケースはパッケージを作るからまず困らない

263 名前:デフォルトの名無しさん mailto:sage [2015/10/29(木) 01:37:25.50 ID:0VE0VetC.net]
>>253 D言語の命名規則に則れば >>254 の言うとおり。
ただ、どうしてもと言うならこんなんはいかがか。
dpaste.dzfl.pl/dce8977dacc7

えーと。やっぱ242で。

264 名前:デフォルトの名無しさん [2015/10/29(木) 10:25:47.23 ID:xCMI4xlR.net]
>>254
なるほと確かにD言語の命名規則からするとモジュール名は小文字でしたね。
でも、どうしても大きなクラスは同名の一ソースにしたいのです‥すみません。

ところでパッケージで気付かせてもらったのですが、この問題って、
クラスのソースらをルート階層に置いているからこそ起きる問題なのですね。
というわけでディレクトリを一つ掘ってパッケージ下に配置することで一応解決しました!

ただ、パッケージ下にあるソースって module パッケージ名.モジュール名 の記述は必ず必要なのでしょうか?
module文の記述が無いとルートパッケージ下として格納されてしまうようで、
module文を普段省略していた身からするとちょっと面倒に感じています。
この辺りの挙動はjavaのpackage文の踏襲かなと思うのですが、
D言語ではパッケージはディレクトリに対応すると書かれているようなので、
module文を省略しても適切なパッケージに配置してくれて良いような?

>>255
おぉ‥改名選択importというやつでしょうか。確かにこれで通りました。
import _Hoge = Hoge : Hoge; という風に変換されるんですね。
import文までコンパイル時生成できるとは、D言語きm‥素晴らしいです。
ただこの書き方ではモジュール名変更リファクタリングの際にIDEが解析しにくい気がするので
(そもそもそこまでお世話してくれるIDEは現存しないようですけれど‥)、
取り敢えずは先のパッケージへの配置法でがんばってみます。
凄いものをありがとうございました。今後の困難の際に参考にします。

265 名前:デフォルトの名無しさん mailto:sage [2015/11/04(水) 15:13:08.14 ID:L5M/yopQ.net]
dmd2.069.0



266 名前:デフォルトの名無しさん mailto:sage [2015/11/06(金) 23:00:00.73 ID:XSTiM1/K.net]
Error: template std.algorithm.s

267 名前:earching.countUntil cannot deduce function from argument types !()(int[11], int), candidates are:
こういうエラーが出たんですけど、countUntilに静的配列は使えないということでしょうか?

Error: template instance sort!((uint a, uint b)
あと、sortに無名関数を渡したらエラーが出ました。無名関数も使えないのでしょうか?
[]
[ここ壊れてます]

268 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 11:16:15.31 ID:oYYknJv4.net]
静的配列に対して popFront() が呼べない(初めて知った!)
だからレンジ系操作に対しては全滅に近い

ソートの方はそれだけじゃ分からんね
無名関数は使い方間違えた時にわかりづらい

269 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 15:26:06.21 ID:k3hAw3NX.net]
静的配列は要素数が変更できないからですか。
Rangeの要件を満たしてないとなると結構不便ですね。

sortはエラーメッセージがこの1行しか出ないんですよね。
シンプルな例でテストしたらコンパイルは通ったんですけど、他のコードが影響してるのかなぁ。

270 名前:デフォルトの名無しさん mailto:sage [2015/11/07(土) 22:04:33.49 ID:X4t7LIyp.net]
固定長配列の全体のスライスを取って動的配列に見せかければ
ある程度のRange操作だったら固定長配列にもかけられるのでちょっと便利です

271 名前:デフォルトの名無しさん mailto:sage [2015/11/08(日) 23:00:15.52 ID:18XUDL229]
静的配列に対してだったらC系の関数呼ぶとかで対応したほうが良いのでは?

272 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 04:06:00.73 ID:PiWCufYC.net]
はあ、なるほど。

273 名前:デフォルトの名無しさん mailto:sage [2015/11/09(月) 04:09:17.37 ID:PiWCufYC.net]
delegateのcovariane/contravarianceはなくなったんですかね

274 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 10:33:38.52 ID:TuAUCuHQ.net]
SortedRange!(R, ((a, b) => binaryFun!less(unaryFun!transform(a),
unaryFun!transform(b))))
schwartzSort(alias transform, alias less = "a < b",
SwapStrategy ss = SwapStrategy.unstable, R)(R r)
if (isRandomAccessRange!R && hasLength!R)
{ ... }

こんなの見ても揺らがないのが真のD言語er

275 名前:デフォルトの名無しさん [2015/11/14(土) 12:16:16.84 ID:AP01jWaC.net]
真のD言語erはそんなに書いて(書かせて)もらえることに感謝する



276 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:42:57.89 ID:uWuWWunU.net]
デバッグ用に関数名を出力したいんですけど、関数名を取得する方法はあるでしょうか?
__FILE__や__LINE__みたいな感じのが欲しいです。

277 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 00:26:31.44 ID:4YAQhy/L.net]
標準入出力をフラッシュするにはどうすればいいですか?

278 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 00:49:19.11 ID:DVr3HCs9.net]
基本的には、DではCの標準ライブラリと同等の関数をほぼそのまま薄いラッパで提供しています

279 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:23:34.60 ID:4YAQhy/L.net]
dout.flush()ということですか。
writeln()に対応するものはないんでしょうか?

280 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:08:17.69 ID:4YAQhy/L.net]
stdout.flush()でできました。

281 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 07:41:57.52 ID:ndJn5r2D.net]
>>267
__FUNCTION__ も使える
日本語訳サイトは古すぎるから
英語サイトも必ず併用すべき

282 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 14:56:12.51 ID:4YAQhy/L.net]
>>272
関数名の取得もあったのですね。
英語苦手だけど見ないとだめですね。

283 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:01:11.74 ID:4YAQhy/L.net]
自作のプログラムを実行すると毎回同じ場所でobject.Error: Access Violationが発生します。
エラーとは関係なさそうな修正(stderr.writeln()を増やしたり減らしたり)をするとエラー発生の場所が変わったり、
InvalidMemoryOperationErrorに変わったりします。
エラーの原因がさっぱり分からないんですけど、どういうことが考えられるでしょうか?

284 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:29:26.30 ID:r8bN ]
[ここ壊れてます]

285 名前:QIop.net mailto: リーク []
[ここ壊れてます]



286 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 16:21:30.07 ID:4YAQhy/L.net]
GCのある言語でメモリリークとなると、どういうケースがあるのか想像がつかないです。
エラー発生の場所も変わるので謎です。

287 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:04:42.06 ID:PV6fOtMt.net]
GCのリーク以外に
確保してない場所に書き込むのもリークって言わない?

288 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:07:38.68 ID:lu/bgS1P.net]
こマ?初めて聞いたその結び付け
リーク=解放処理漏れ 以外の認識ないわ

289 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:19:50.76 ID:4YAQhy/L.net]
newする前のクラスのインスタンスの関数を使ってAccess Violationが出たことは過去にありますね。
しかし、今回はちゃんとnewされているし、1回目の呼び出しでエラーが発生してるわけでもないんですよね。
そして>>274で書いたようにstderr.writeln()を追加するだけでエラー発生のタイミングが変わるので難解です。

290 名前:デフォルトの名無しさん [2015/11/15(日) 18:08:15.11 ID:PV6fOtMt.net]
初期化してない変数でアクセス

291 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 18:39:09.01 ID:ndJn5r2D.net]
AVならばぬるぽか RangeErrorか deleteの間違い
-g -debug してないんかいな

InvalidMemoryOperationError 
ならばデストラクタの中で何か変なことしてる疑い

デストラクタの中でdeleteとかしちゃダメダメよ〜

292 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 18:44:09.41 ID:zgz009B6.net]
似たことなったことあるなあ。なんやったか。
templateとかmixinがらみで依存関係見落としててobjの更新忘れとか。

293 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 19:02:33.53 ID:4YAQhy/L.net]
すみませんReleaseビルドになってました。
DebugビルドにしたらRangeErrorになりました。

294 名前:デフォルトの名無しさん [2015/11/15(日) 19:09:44.01 ID:PV6fOtMt.net]
報告乙

295 名前:デフォルトの名無しさん [2015/11/19(木) 16:51:28.76 ID:I2rQS35X.net]
char *hoge[] = new char *[N];
scope(exit) free(hoge.ptr);
とするのと
char **hoge = cast(char **)(new char *[N]);
scope(exit) free(hoge);
とするのとでは同じ動作が期待出来ますか?

あとガベコレを期待するなら
scope(exit) free(hoge.ptr);

scope(exit) free(hoge);
もどちらも不要ですか?



296 名前:デフォルトの名無しさん mailto:sage [2015/11/19(木) 23:48:30.24 ID:kWkiLP1L.net]
色々とカオス(感想)
C : malloc/free
C++: new/delete

D : new/[destroy]
GCがあるので解放は不要だが、領域が不要になったことをdestroyで明示してもよい
ただしdestroyで領域が即時解放されるわけでなく、GCが必要に応じてよしなにやる
C++のdeleteと区別するために、destroyになった(想像)
---
auto hoge = new int[][N]; // int型の動的配列をN要素もてる動的配列(二次元配列)
foreach (elem; hoge)
elem = new int[色々]; // ジャグ配列も可能
// 以下は不要(してもよい)
foreach (elem; hoge)
destroy(elem);
destroy(hoge);
---
GCを使わずmalloc/freeすることも一応可能
(今だと、std.experimental.allocatorを使うべき?)
newしたものをfreeすることに保証はないと思う、知らんけど

297 名前:デフォルトの名無しさん mailto:sage [2015/11/20(金) 01:05:01.96 ID:gniDkGmv.net]
× foreach(elem; hoge)
○ foreach(ref elem; hoge)

298 名前:デフォルトの名無しさん [2015/11/20(金) 10:48:03.85 ID:LnAg0HCn.net]
ありがとうございます!!

299 名前:デフォルトの名無しさん [2015/11/20(金) 22:50:35.51 ID:KMWFgUCm.net]
クラスのstaticメンバ関数で、継承先の型って見られますか?

class Base {

static T[] takusanMake(T)(int n) { //Hogeから呼んでT=Hogeがほしい
T[] ret = new T[n];
foreach (ref e; ret) {
e = new T;
}
// ... Baseのフィールドしかいじらないような設定 ...
return ret;
}

}

class Hoge : Base {
}

void main() {
//Hoge
auto hoge = Hoge.takusanMake(30);
}

内容はともかく、大体こんな感じのことをしたいです
Baseから派生したクラスで定義するとか、ちゃんと!(Hoge)してもいいんですが、
(this T)を見てから何か方法があるような気がしてきて・・・

300 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 13:20:00.57 ID:1cOWOBS ]
[ここ壊れてます]

301 名前:i.net mailto: staticなメンバ関数からは、thisは見えないので
UFCS前提でいっそ外部に出して
===
import std.stdio;

class Base {}
class Hoge : Base {}
class Other {}

T[] takusanMake(T : Base)(lazy T d, int n) {
auto ret = new T[n];
foreach (ref e; ret) {
e = d();
}
return ret;
}

void main() {
auto hoge = (new Hoge).takusanMake(30);
typeid(hoge).writeln;
// Baseに暗黙変換できない型はNG
//auto other = (new Other).takusanMake(30);
}
===
こういうのはどうだろう
(もっといい方法ありそう。。)
[]
[ここ壊れてます]

302 名前:デフォルトの名無しさん [2015/11/21(土) 14:42:18.71 ID:8z9xCqW5.net]
Hoge という型と Fuga という型があって

Hoge[Fuga] hage;
という連想配列は定義できるみたいなのですが

Any という任意の型があるとして
Any[Any] moge;
みたいな連想配列は作れますか?

303 名前:デフォルトの名無しさん [2015/11/21(土) 14:47:56.80 ID:8z9xCqW5.net]
ちなみに
["A": "B", "C": 3, 4: "E"]
みたいなのを作りたいのです

304 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 15:28:20.57 ID:8z9xCqW5.net]
Object[Object] moge = ["A": "B", "C": 3, 4: "E"];

これでだめでした orz

305 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 22:31:38.28 ID:jpeEJ7vY.net]
import std.variant;
auto moge = [Variant("A"): Variant("B"), Variant("C"): Variant(3), Variant(4): Variant("E")];
とかいうダサい感じのしか思いつかない。



306 名前:デフォルトの名無しさん mailto:sage [2015/11/21(土) 23:35:17.00 ID:BXVotCtM.net]
>>290
確かにもう外に出してしまう方がいいかもしれないですね
外に出すことは考えてなかったのでもうちょっと考えてみます

307 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 12:23:27.44 ID:rXOpUu6m.net]
>>291
型付き言語に喧嘩売ってんのか

308 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 12:42:54.55 ID:rXOpUu6m.net]
>294
ダサくてよければ

Variant[Variant] constructor(T...)(T plist){
Variant[Variant] result;
foreach(ref p; plist) result[new Variant(p.keys[0])] = new Variant(p[p.keys[0]]);
return result;
}
Variant[Variant] moge = constructor(["A": "B"], ["C": 3], [4: "E"]);

試してないけど

309 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 18:10:01.30 ID:K6EhBG35.net]
引数が1個ずつ別のAAになってる…?
きもちわるすぎる

310 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 18:34:22.00 ID:uPJ5yBy3.net]
import std.variant;
import std.stdio;

Variant[Variant] makeTable(T...)(T p) {
static assert(T.length%2 == 0);
Variant[Variant] t;
foreach (i, ref v; p) {
static if (i%2 == 0) {
t[Variant(p[i])] = Variant(p[i+1]);
}
}
return t;
}

void main() {
auto t = makeTable(1, 2, "hoge", 123.2);
writeln(t);
}

311 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 19:32:11.41 ID:QPIcOg4c.net]
>>293
dpaste.dzfl.pl/2879b11f3fec
ま、やっぱロクなことにはならんわなあ。

312 名前:287 mailto:sage [2015/11/22(日) 19:46:28.38 ID:QPIcOg4c.net]
やっぱコード追加で。連投御免。
dpaste.dzfl.pl/19cc3ea3bd0d

313 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 14:44:46.01 ID:5yZmzCJ8.net]
mixin使ったら負けな感じ半端ない

314 名前:デフォルトの名無しさん mailto:sage [2015/11/23(月) 23:06:50.39 ID:zlo1l7ot.net]
やろうとしてること自体闇魔術臭いしわりと妥当なのかもしれない

315 名前:デフォルトの名無しさん mailto:sage [2015/11/24(火) 12:03:53.42 ID:Dj+m8Q01.net]
>>297>>299 ってどちらもコンパイル時に
解決された型変換のコードが生成されるのですか?
つまり前者も後者も実行時の速度パフォーマンスは同じですか?



316 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 00:37:26.01 ID:euvQfHeH.net]
>>304
どんなコードが生成されるか知らないのでベンチとって見た結果
dpaste.dzfl.pl/85212474e9f0
281: TickDuration(3595337)
284: TickDuration(9347285)
286: TickDuration(4128184)
288: TickDuration(3554533)

317 名前:デフォルトの名無しさん [2015/11/26(木) 17:49:18.83 ID:yeqvnwwH.net]
Dでcomのclientを書こうとして付属のサンプルソースを試したら動作しました

wshサーバーをdispatchしてEcho('hoge')みたいなポップアップを出したいのですが
サンプルをどのように書き直せばよいのですか

318 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 17:58:08.82 ID:yeqvnwwH.net]
途中まで書いたコードです
extern (Windows) HRESULT CLSIDFromProgID(const wchar *, CLSID *);
const string wsh = "WScript.Shell";
interface IWSH : IUnknown {
extern (Windows) int Echo();
}
DWORD dwVer = CoBuildVersion();
HRESULT hr = CoInitialize(null);
hr = CLSIDFromProgID(wsh.toUTF16z(), &clsid);
IWSH pIWSH;
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IUnknown, &pIWSH);
// FAILED(hr)の判定コードは省略していますがここまでは動作しているようです
// pIWSHに値は入っているようですが次の場所でAccessViolationします
pIWSH.Echo();
CoUninitialize();

pIWSH.Echo(); の行をコメントアウトすると何も起きませんが正常に完了します
あと
&IID_IUnknown
のところを
&IID_IDispatch
に書き換えてもだめでした

319 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 21:43:51.54 ID:FqPwpLUO.net]
>>307
ちょっとまだよく分かってなくてEcho呼んでも何も起きなかったけど、
PopUp呼べたので参考になりますか?
dpaste.dzfl.pl/15f1655e540e

320 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:55:22.81 ID:H96QzFnR.net]
>>307
IDLとかタイプライブラリとか見ずに静的バインディングしようとしてる
普通は中間ヘッダを入手するかツールで生成する
C++で一度やったことがないとダメ

ちなみに >>308 は動的バインディング

321 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 09:52:51.69 ID:c/N8jVfb.net]
>>307
WScript.Shell に Echo は無いよw

322 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 10:48:43.15 ID:Og1YQ9Di.net]
>>310
うっかり勘違いしてました

標準のinterfaceから継承する方法ですが
interface IWSH : IUnknown { // add vtbl to define as IDispatch
extern (Windows) HRESULT GetTypeInfoCount(UINT *);
extern (Windows) HRESULT GetTypeInfo(UINT, LCID, REFIID);
extern (Windows) HRESULT GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *);
extern (Windows) HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}
にして
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IDispatch, &pIWSH);
したら
後は >>308 さんと同じように PopUp("Hage") を Invoke 出来ました
ほんとうにありがとうございました

323 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:49:41.82 ID:c/N8jVfb.net]
質問です。
SysTime st = Clock.currTime();
writefln("%s", st.toISOExtString());
writefln("%s", st.toISOString());
の動作で末尾の小数点以下の数字 (hnsecs) が
7桁になるときと6桁になるときがあるみたいです。

先頭の 0 が表示されないケースがあると思ったのですが
通常の '年月日T114500.1234567' 以外に
'年月日T114500.0123456' は表示されました。
ところがたまに '年月日T114500.123456' と表示されることがあります。
つまり '年月日T114500.0123456' なのか '年月日T114500.1234560' なのか判りません。
hnsecs==0 のときにこのパターンがあるみたいなのですがみなさんのところはどうですか?
DMD32 D Compiler v2.063.2
です。

324 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 11:52:34.38 ID:c/N8jVfb.net]
ちょっと紛らわしいので一部訂正します。

x 小数点以下の数字 (hnsecs) が
o 小数点以下の数字 (total hnsecs) が

x hnsecs==0 のときにこのパターンが
o msecs==123, usecs=456, hnsecs==0 のときにこのパターンが

325 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 14:33:53.29 ID:gmvL3Mcs.net]
"年月日T114500.123456" == "年月日T114500.1234560"じゃないの?



326 名前:デフォルトの名無しさん [2015/11/27(金) 15:13:20.37 ID:c/N8jVfb.net]
なるほど小数点以下だから末尾の0は除かれるんですね。
7桁だと思って決め打ちしない方が良いですね。

327 名前:デフォルトの名無しさん [2015/11/27(金) 15:16:44.79 ID:c/N8jVfb.net]
Duration d = hoge - fuga;
d.total!"msecs", d.total!"usecs", d.total!"hnsecs" を使うことにします。

328 名前:デフォルトの名無しさん [2015/11/28(土) 10:52:50.96 ID:BU0Z8dtz.net]
python の __getattr__
ruby の method_missing
javascript の __noSuchMethod__
みたいなものを期待して
D で同じようなものが有るかどうか検索したら
forum.dlang.org/post/op.usipp0mij5j59l@my-tomato
というやりとりが見つかりました
そこのサンプルをコンパイルしようとしたのですがエラーになります
D で opDotExp ってどう使うんですか?

329 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 11:37:36.45 ID:3W8Apw0w.net]
opDispatch()

ただし型のコントロールは引数とか名前付けとか工夫して自前で面倒を見る必要がある

330 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 16:26:20.89 ID:pFoee08yy]
動的型付け言語と一緒にしちゃいかんでしょ

331 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 17:00:55.36 ID:OpEOTh0X.net]
ないですね

332 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 18:45:48.60 ID:DyLnKIJJ.net]
import std.stdio;

class Hoge {
void opDispatch(string s)() {

333 名前:デフォルトの名無しさん [2015/11/30(月) 20:34:23.05 ID:SJumDZBl.net]
有賀d

334 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 20:43:06.11 ID:SiMJvgO4.net]
IDispatch で
auto xl = Dispatch("Excel.Application");
xl.Visible = true;
auto workbooks = xl.Workbooks;
まではうまく逝くのに
auto book = workbooks.Add();
で Access Violation してしまう
何が間違ってるんだろう

335 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 02:22:06.91 ID:Zh0/OJc/.net]
Excel持ってないんであれだけど、Workbooksが返すのはコレクションらしいよ。
https://msdn.microsoft.com/ja-jp/library/aa288625%28v=vs.71%29.aspx
https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.collection.add%28v=vs.90%29.aspx
とか見るに、Add()はリストに追加しますよってメソッドじゃね?



336 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 08:39:45.47 ID:yW8K+bhB.net]
Add がデフォルト引数を持ってるけど引数明示したらどうなるかな
ぐぐったら xlFileFormat 列挙型 とか出てくる

337 名前:デフォルトの名無しさん [2015/12/01(火) 20:10:30.52 ID:9BYkXgQy.net]
a.unknownproperty = hoge;
みたいなのも opDispatch!"unknownproperty"(Args args...) で書けますか?






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

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

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