Mam abstrakcyjna klasa podstawowa:Zapewnienie klasa abstrakcyjna bas jest shared_ptr
struct Base : std::enable_shared_from_this<Base>
{
virtual ~Base() = default;
virtual void foo() = 0;
void bar() {
baz(shared_from_this());
}
};
Jedyny ważny przypadek użycia dla Base
jest żyć w shared_ptr
- bar
jest ważną metodą. Skąd mogę mieć pewność, że następuje to niemożliwe:
struct BadDerived : Base {
void foo() override { ... }
};
BadDerived bd;
bd.bar();
Czy myślisz o używaniu nie-wirtualnego interfejsu? http://stackoverflow.com/a/2735596/4342498 – NathanOliver
Jeśli byłby sposób na zrobienie tego, 'enable_shared_from_this' już to zrobiłoby, a twoja klasa dostałaby to za darmo. –
@vsoftco Nie chcę być w stanie zbudować 'Base' poza' shared_ptr', aby 'bar()' nie mógł być wywołany poza 'shared_ptr'. – Barry