2012-04-16 7 views
4

クラスのデータメンバーに割り当てたい多少の範囲があります。メンバー宣言で使用する範囲のタイプを取得する

chain(nicklist, 
     map!(a=>format("%s%d", nicklist[0], a))(sequence!"n+1"())) 

nicklistだけstring[]です。通常、私の信頼できる友人autoはこれを処理するだけですが、データメンバーのためにタイプを宣言する必要があり、そのタイプが何であるべきかについては犠牲になっています。私はそれを得るためにtypeof()を使用する方法を理解しようとしましたが、ランタイムの引数が私を混乱させ、私はそれを公式化する方法を見つけ出すことができませんでした。

(これはIRCボットに使用されています。ニックリストはニックのリストです。ニックの衝突を起こしたすべての人が使い果たされた後、最初のニックに数字が追加されます)

+0

+1 C#形式のラムダを使用する場合:D – Mehrdad

+3

Btw式の型を出力するには、いつも 'pragma(msg、typeof());'と言うことができます。役に立つかもしれない。 – Mehrdad

+0

これはC#スタイルではありませんが、もっと一般的にはMLスタイルのラムダで、20年ほど前です...私はC#デザイナーが影響を受けていると推測しています。 – DejanLekic

答えて

6

これは動作します:

typeof(chain(cast(string[])[], map!(a=>format("%s%d", "", a))(sequence!"n+1"()))) memberVar; 

を別の可能性は、関数はそれをラップして、その戻り値の型を取り、それを使用できるようにするには、次のようになります。

auto func(string[] nicklist) 
{ 
    return chain(nicklist, 
       map!(a=>format("%s%d", nicklist[0], a))(sequence!"n+1"())); 
} 

ReturnType!func memberVar; 

ReturnTypeはstd.traitsにあります。

+0

ResultTypeのアプローチを使用しました。素晴らしい仕事をした。ありがとう。 – eco

関連する問題