Вызов защищенного ctor наследующего класса из статического шаблонного метода базового класса завершается неудачно
У меня есть класс компонента, который определяет статический метод шаблона того, какComponent
следует создать в общем:
class Component {
protected:
uint32_t id;
Component(uint32_t id) :
id(id) {
}
template<typename T, uint32_t C>
static T* createComponent() {
// content here not relevant
return new T(someParameter);
}
};
Тогда есть реализация, напримерButton
, Конструктор этого класса не должен использоваться напрямую, вместо этого есть статический метод, который вызываетComponent::createComponent
шаблонная функция.
class Button: public Component {
protected:
Button(uint32_t id) :
Component(id) {
}
public:
static Button* create();
};
Реализация выглядит следующим образом, передавая тип экземпляру и константу, используемую при создании:
Button* Button::create() {
return createComponent<Button, UI_COMPONENT_BUTTON>();
}
Теперь проблема в том, что компилятор жалуется"ошибка: 'Button :: Button (uint32_t)' защищена", Насколько я понимаю, этот вызов конструктора должен быть в порядке, так какButton
продолжаетсяComponent
, но это, кажется, проблема здесь.
Как я могу решить это?