我正在尝试在我的程序中为结构的不可变字段创建属性,但我不喜欢使用它需要的样板量。 我只是想让舒尔没有更短的路。
struct Foo
{
private immutable int[] bar_;
@property immutable public immutable(int[]) bar() { return bar_;}
this(immutable int[] bar)
{
this.bar_ = bar;
}
}
void main()
{
immutable foo = Foo([0, 1, 2, 3, 4]);
auto bar = foo.bar;
}
我希望像
这样的东西private immutable int[] bar_;
@property public immutable(int[]) bar() { return bar_;}
甚至是半c#风格
public immutable int[] bar { get; }
我目前拥有的版本似乎有很多模板和混乱。我希望有一个更短的方式来编写一个' bar()'我不知道的功能。
答案 0 :(得分:3)
您可以使用accessors库生成setter:
import accessors;
struct Foo
{
@Read("public")
private immutable int[] bar_;
mixin(GenerateFieldAccessors);
}
然而,正如Adam所说,您通常不需要或不想使用immutable
字段的setter和getter属性。