4

我有一个有点复杂的范围,我想分配给一个类的数据成员。

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

nicklist只是一个string[]。通常,我可信赖的朋友auto会处理这个问题,但对于数据成员,我需要声明类型,而我不知道该类型应该是什么。我试图弄清楚如何使用typeof()它来获取它,但运行时参数让我感到困惑,我无法弄清楚如何制定它。

(这被用于 IRC 机器人。nicklist 是我希望它按顺序尝试的刻痕列表,在它用尽了所有刻痕冲突的刻痕后,它只会尝试第一个附加数字的刻痕)

4

1 回答 1

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 中。

于 2012-04-16T08:34:56.777 回答