dblaikie added a comment.
Perhaps all these clone implementations could be provided via mixin instead?
struct base {
virtual std::shared_ptr<base> Clone() = 0;
...
};
template<typename Derived, typename IntermediateBase = base>
struct base_clone_helper : IntermediateBase {
static_assert(std::is_base_of<base, IntermediateBase>::value);
std::shared_ptr<base> Clone() const override {
return std::make_shared<Derived>(static_cast<const Derived&>(*this*));
}
};
struct some_immediate_derivation final :
base_clone_helper<some_immediate_derivation> {
};
struct some_intermediate_helper : base {
...
};
struct some_concrete_derivation final :
base_clone_helper<some_concrete_derivation, some_intermediate_helper> {
};
Requiring that all such types be copy constructible (I guess the template
helper could also provide an rvalue overload of Clone if there's a need to have
move cloning, though that seems unlikely to be needed/useful)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96817/new/
https://reviews.llvm.org/D96817
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits