Czy istnieje mechanizm umożliwiający egzekwowanie chronionego konstruktora w klasie pochodnej?Egzekwowanie chronionego konstruktora w klasie pochodnej
Prosty przykład:
template<typename T>
class Factory;
class Base {
template<typename T>
friend class Factory;
protected:
Base();
};
class Child : public Base {
public:
Child(); // this should lead to a compile time error
};
<template T>
class Factory {
Base* GetNew()
{
BOOST_STATIC_ASSERT(boost::is_base_of<Base, T>::value);
Base* b = new T();
b->doStuff();
return b;
}
};
Więc chcę klasa dziecka do creatable wyłącznie przez fabrykę i egzekwowania, że wszystkie klasy potomne wynikające z zasady posiada zabezpieczoną konstruktora.
Dzięki temu bardzo dobry pomysł. Tak naprawdę myślałem już o czymś podobnym. Chciałbym również przyjąć twoją odpowiedź, ale niestety mogę ją zaakceptować. – Chris
To jest w porządku. Nie robię tego dla chwały. Robię to, ponieważ (a) pozwala mi to zachować czujność i (b) zdaję sobie sprawę, że C++ jest fantastycznym językiem i lubię, gdy się go dobrze używa. –