Вызов защищенного 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, но это, кажется, проблема здесь.

Как я могу решить это?

Ответы на вопрос(3)

Ваш ответ на вопрос