typeAggregator
と oneがあるとしAggregatee
ます。前者はshared_ptr
s によって後者のコレクションを知っています。後者には、前者への一意のバック ポインターがあります。
struct Aggregatee {
private:
Aggregator& aggregator;
Aggregatee(Aggregator& aggregator)
: aggregator{aggregator} {
// PROBLEM HERE:
// I want to put `this` into the aggregation list,
// but I have no clue how to properly refer to `this`
// because I don't have the smart pointer object, yet.
}
Aggregatee(Aggregatee const& from) { /* ... */ }
public:
template <typename Args...>
static std::shared_ptr<Aggregatee> create(Args... args) {
return std::make_shared<Aggregatee>(args...);
}
};
struct Aggregator {
std::set<std::shared_ptr<Aggregatee>> aggregation;
};
明らかに、プライベート関数を使用しAggregatee
てAggregator
オブジェクトへの登録を延期できますが、オブジェクトが一時的に一貫性のない初期化されるため、2 フェーズのようなにおいがします。make_shared
register
これに対する既知の解決策はありますか?