Ваш базовый конструктор не может ничего сделать с дочерним классом.Совсем.Последнее еще не было построено.
CRTP позволяет другим функциям-членам Foo
делать это, но это все.
В дизайне, к которому вы пришли, "быстрого исправления" нетмы придумали.Вы можете либо добавить Init
-подобную функцию к Foo
, чтобы сделать это позже (и вызвать ее из ctor-объекта ребенка), либо (в идеале) переосмыслить свой подход.
Это немного странно, что выне может изменить дочерний класс, но добавляет вещи в Base
- это не то, как предполагается наследование, и кажется, что вы пытаетесь использовать CRTP, чтобы разобраться с этим, но выяснили, почему этоне действительный взлом.
Не зная, что вы пытаетесь сделать, я не могу быть более точным, чем это.
Может быть, заводская функция может вам помочь?Или наследовать от Bar
.