is(typeof({}()))


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/4/7 3:07
tama  一人前   投稿数: 111
Andreiがstd.rangeとかで使っているこれ,「delegateを呼び出して,それが動けばOK」と思ってたんですが
#code(d){{{
template hasFoo(T)
{
enum bool hasFoo = is(typeof(
{
T t;
t.foo;
}()));
}

struct A { void foo() {} }
class B { void foo() {} }

hasFoo!(A); // true
hasFoo!(A*); // true
hasFoo!(B); // true
hasFoo!(B*); // true
}}}
となって分からなくなりました(Rangeは構造体だけなので気付かなかった).これってどういう原理なんですかね?
投票数:64 平均点:5.31
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/4/7 3:18
haru-s  新米   投稿数: 17
単にコンパイルできればokということでは?
投票数:48 平均点:5.42
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/4/7 4:16
tama  一人前   投稿数: 111
そのようです."is(typeof({}))"でも同じ成果がでるので"is(typeof({}()))"とdelegateの呼び出しを行っているのが謎ですが.()がないと上手くいかないパターンがあるんですかね…

後[[バグがある:http://twitter.com/satoru_h/status/11712971015]]みたいなので(コンパイルが通るかどうかだとすれば),ちゃんとテストしないと行けないですね^^;
投票数:59 平均点:4.24
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





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

Menu