Ошибка C2440 в VisualStudio 2019

Типы kp::InputField/Button/Timer* не конвертируются в ReturnClass*. Что здесь не так? Непонятно.

template <class ReturnClass>
static ReturnClass* createObject(kp::ObjectType type)
{
    switch (type)
    {
        case kp::ObjectType::InputField:
            return createInputField();

        case kp::ObjectType::Button:
            return createButton();

        case kp::ObjectType::Timer:
            return createTimer();

        default:
            return nullptr;
    }
}

Ответы (1 шт):

Автор решения: Никита Самоуков

Если тип неизвестен на этапе компиляции, то вернуть разные типы нельзя. Темплейты тут бессильны.

Можно так:

variant<TypeA*, TypeB*, void*> createObject(kp::ObjectType type)
→ Ссылка