mixinした結果が欲しい


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/1 17:33
tama  一人前   投稿数: 111
これって今出来ますかね?dmdのオプションみてもないような気がするんですが(読む時は展開したソースで読みたい).
投票数:204 平均点:5.20
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/2 19:41
SHOO  管理人   投稿数: 658
#code(d){{{
import std.stdio;
import std.metastrings;

template TMP(int N)
{
static if (N) mixin TMP!(N-1);
mixin(`int x`~ToString!(N)~`=`~ToString!(N)~`;`);
}

int main()
{
mixin TMP!(5);
writeln(x0);
writeln(x1);
writeln(x2);
writeln(x3);
writeln(x4);
writeln(x5);
return 0;
}
}}}

こういうコードでTMP!(5)をmixinした際に中身がどうなるかということ?
IDEとかで表示させるしかない気がする…
そしてDescentならやってくれる!

#video(youtube,oAhrFQVnsrY,1);
投票数:119 平均点:5.63
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/5/7 23:52
tama  一人前   投稿数: 111
文字列mixinとかもあるので,そのmixinした結果がソースで欲しいんですよね.フェースが分かれてるので,コンパイラ側で何かスイッチが欲しいなぁとか思ってるんですが,うむむ.
IDE無しでも見たい…
投票数:139 平均点:4.53
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/5/9 12:39
SHOO  管理人   投稿数: 658
久々にアップデートされたようなので、Poseidonでも試してみましたが、template関係はあまり上手に展開されないようです…
#code(d){{{
class A(T)
{
static if (is(T==int)) int a;
else double b;
}
}}}
上記のようにstatic if ~ else ~ で分岐させても、両方とものメンバを解析してしまうようで、aもbもメンバとして解析されてしまう。
CTEFとか文字列mixinとか、IDEにとってはあまりやさしくない機能も多いので、コンパイラで展開してソースコードにしてくれるような方法があるのであれば、確かにうれしい場合もあるかもしれません。
投票数:164 平均点:5.43
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu