2013-11-13 2 views
2

Я использую класс в библиотеке, что мы будем называть LibraryClass<BaseClass> где LibraryClass<> наследует от своего шаблона, как так:«Override» конструктор и вызвать прародитель конструктор

template<class BaseClass> 
class LibraryClass 
: 
    public BaseClass 
{ 
... 

Этот класс делает именно то, что я хочу, однако в конструкторе есть ошибка. Я пытаюсь создать производный класс следующим образом:

template<class BaseClass> 
class MyClass 
: 
    public LibraryClass<BaseClass> 
{ 
... 

, а затем просто добавить новый конструктор. Однако в конструкторе MyClass() мне нужно вызвать конструктор BaseClass(), который не является прямым родителем. Как указано выше, я не хочу вызывать LibraryClass(), поскольку у него есть ошибка.

Как создать новый класс с помощью только нового конструктора?

+0

Предположим, вы можете обойти конструктор родителя. Что обеспечило бы, чтобы родительский подобъект находился в работоспособном состоянии (если он не был инициализирован)? – NPE

+0

Вы можете попытаться создать «обход» конструктора внутри 'LibraryClass' - и заставить его вызывать, т. Е. По определенным аргументам. –

+2

Несомненно, это самый новый подход к исправлению ошибок, который я видел за многие годы ;-) –

ответ

3

Я сомневаюсь, что соответствует стандартам способ обойти родительский конструктор в общем случае (если существует такая вещь, что бы гарантировать, что родительский субобъект остается в работоспособном состоянии?)

ИМО - лучший способ исправить ошибку, изменив LibraryClass.

Если вы не можете этого сделать, вы можете скопировать LibraryClass и исправить ошибку в своей копии. Это имеет очевидные и потенциально существенные недостатки.

Еще одна потенциальная альтернатива - вызвать конструктор ошибок, а затем исправить объект в MyClass::MyClass, чтобы обойти ошибку. Этот подход может работать или не работать для вашего дела.

Смежные вопросы