shared
такой странный зверь, в основном Mutex
имеет только конструкторы, которые принимают общие объекты, которые имеют Mutex
, что не является Foo.
Condition
не имеет конструктора, которыйзанимает shared(Mutex)
.
В принципе, вы можете обойти это с помощью этого:
class Foo {
private Mutex mtx;
private Condition cnd;
shared this() {
mtx = cast(shared)new Mutex(cast() this);
cnd = cast(shared)new Condition(cast() mtx);
}
}
Если конструктор shared
похож на this() shared
, то он на самом деле не применяется квсе, что ему передано, и в основном это только для его тела AFAIK.
Однако, чтобы уточнить код выше.
cast()
отбросит любые атрибуты, которые применяются к типу ex.shared
, что позволит вам передать его конструкторам.
Поскольку конструктор Foo
является общим, нам нужно привести Mutex
и Condition
обратно к shared
, иначе мы не сможем назначитьих к mtx
и cnd
, которые shared
из-за конструктора.