4

次のように宣言された一連のコマンド ライン オプションを C 関数に転送し、D メインが引数を取るとします。

extern (C) void init(int argc, char** argv);

void main(string[] args) {
    init(args.length, map!(toStringz)(args));
}

最初のパラメーターは簡単ですがtoStringzargs配列に適用しようとしてもうまくいきません。私は得るcannot implicitly convert expression (map(args)) of type MapResult!(toStringz,string[]) to char**。どのように変換string[]しますchar**か (またはconst(char)**)。

4

1 に答える 1

4

std.algorithm.map関数は範囲を返します。この場合、配列に変更する必要があります。を使用してこれを行うことができますstd.array.array。次に、を使用して配列ポインタを取得できます.ptrimmutable(char**)にキャストされたものを返しますchar**

extern (C) void init(int argc, char** argv);

void main(string[] args) {
    init(cast(int)args.length, cast(char**)map!(toStringz)(args).array.ptr);
}

ライブデモはこちら: http://dpaste.dzfl.pl/ff81984c

于 2012-10-29T16:21:25.183 に答える