Скажем, у вас есть базовый класс Dep
для дерева классов. Существует виртуальный метод Dep* Dep::create()
, который я хочу реализовать в каждом отдельном листовом классе. Есть ли способ обеспечить это?
Примечание. Проблема здесь в том, что могут быть промежуточные классы (скажем, class B : public A : public Dep
), реализующие этот метод (A::create
) случайно или потому, что они думают, что они конечные классы, но на самом деле сами являются подклассами.
На этом вопрос заканчивается.
Контекст
Если вам интересно, зачем мне это нужно; У меня есть класс Master
, в котором есть Dep
объектов неизвестного конкретного типа. Если Master
дублируется, мне нужно придумать соответствующий клон экземпляра Dep
. Следующее, что лучше всего сделать, это идиома виртуального конструктора, которая вводит именно эту проблему.
Кроме того, я даже не могу поймать это (кроме ужасного сбоя), потому что по неясным причинам люди, которым есть что сказать больше, чем я, объявили dynamic_cast
вне закона в этом проекте (возможно, это хорошее решение; но в любом случае это совсем другой разговор) .
static_cast
указатьDep
указателей на то, во что я верю. Поэтому, если бы они были созданы с неправильным типом, я бы превратил их во что-то, что, скорее всего, совершенно несовместимо (другой лист). - person bitmask   schedule 03.09.2011class T : public Base, public CloneTest<T>
, тоCloneTest<T>
могло бы содержать typedef дляdeclspec(this->T::clone())
, что потерпело бы неудачу (?), если бы не было переопределения. - person Kerrek SB   schedule 03.09.2011CloneTest
, или я что-то упустил? - person bitmask   schedule 03.09.2011grep
... - person Kerrek SB   schedule 03.09.2011