Ваше решение для конструктора с одним параметром не кажется действительно полезным в том смысле, что оно все еще не может получить доступ к создаваемому классу (как это еще не происходит), и неясно, как что-либо полезное можно сделать с помощью этого хакера.form (за исключением, возможно, установки глобальных значений области видимости, которые влияют на базовый ctor).
Предлагаемое решение Стефана будет выглядеть примерно так:
struct A {
A() { printf("A::A()\n"); }
};
struct Injector {
Injector() { printf("inject()\n"); }
}
struct B : public A,private Injector {
B() : Injector(), A() { printf("B::B()\n"); }
};
Это нормальное решение, но кажется немного неуклюжиммне.Другое возможное решение - использовать статическую функцию класса вместо конструктора для B, который запускает инъекцию перед возвратом экземпляра объекта, созданного с помощью частного конструктора, но из вашего вопроса видно, что это не соответствует вашему контексту.