added observer to repository and updated tests
This commit is contained in:
@@ -20,8 +20,8 @@ public:
|
||||
template< typename Type>
|
||||
using creator_func = std::function<std::unique_ptr<Type>()>;
|
||||
|
||||
template < typename Type >
|
||||
static std::shared_ptr<repository_node> make_node(repository& repo, const std::string& name, creator_func<Type> creator = []{ return std::make_unique<Type>(); }) {
|
||||
template < typename Type, typename... Observers >
|
||||
static std::shared_ptr<repository_node> make_node(repository& repo, const std::string& name, creator_func<Type> creator, Observers&&... observers) {
|
||||
const std::type_index ti(typeid(Type));
|
||||
auto node = std::shared_ptr<repository_node>(new repository_node(repo, name, ti));
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
std::move(obj),
|
||||
std::forward<creator_func<Type>>(creator)
|
||||
);
|
||||
(info->register_observer(observer_ptr<Type>(std::unique_ptr<Observers>(new Observers(std::forward<Observers>(observers))))), ...);
|
||||
node->info_ = std::move(info);
|
||||
|
||||
return node;
|
||||
@@ -63,6 +64,9 @@ public:
|
||||
|
||||
[[nodiscard]] bool has_children() const;
|
||||
|
||||
void on_attach() const;
|
||||
void on_detach() const;
|
||||
|
||||
private:
|
||||
explicit repository_node(repository& repo);
|
||||
repository_node(repository& repo, const std::type_index& ti);
|
||||
|
||||
Reference in New Issue
Block a user