Скажем, у вас есть базовый класс Dep
для дерева классов. Существует виртуальный метод Dep* Dep::create()
, который я хочу реализовать каждым отдельным листовым классом. Есть ли способ обеспечить это?
Примечание: проблема здесь в том, что могут быть промежуточные классы (скажем, class B : public A : public Dep
), реализующие этот метод (A::create
) случайно или потому что они считают листовыми классами, но на самом деле сами подклассифицированы.
Здесь вопрос заканчивается.
Контекст
Если вам интересно, зачем мне это нужно; У меня есть класс Master
, в котором есть Dep
объекты неизвестного конкретного типа. Если дублируется Master
, мне нужно найти соответствующий клон экземпляра Dep
. Следующая лучшая вещь, которую нужно сделать, - это идиома виртуального конструктора, которая в точности представляет эту проблему.
Кроме того, я даже не могу поймать это (кроме ужасного сбоя), потому что по неясным причинам люди, которые могут сказать больше, чем я, объявили вне закона dynamic_cast
в этом проекте (возможно, это хорошее решение; но в любом случае совершенно другое обсуждение).