AD
Size: a a a
AD
AD
В
АК
AD
В
AD
ГH
ПК
ИI
SE
AS
O
// our headerА теперь проблема. Ключевое слово
// На самом деле это какая-то
// сложная инстанция шаблона,
// для которой мы не можем
// сделать форвард-декларацию
struct Foo;
std::shared_ptr<Foo> foo_ptr;
// our cpp file
// нужный нам шаблон
#include <foo>
struct Foo
: libfoo::foo< libfoo::some_other_type
, libfoo::some_class::nested>
{ using foo::foo; }
// Здесь мы можем свободно работать
// с foo_ptr как с libfoo::foo, например:
int main() {
foo_ptr->bar();
}
final
. Лично я для себя его как попытку помочь компилятору соптимизировать наш код, однако, его наличие так же бонусом ломает и код выше. final
не запрещало наследование от класса, а только запрещало только перегрузку виртуальных функций (и возможно, расширение класса?)? final
? Может ли в реальном коде понадобиться предотвращение наследования для других целей?DP
ПК
vec.push_back(std::make_unique<std::mutex>());
S
vec.push_back(std::make_unique<std::mutex>());