Я хотел бы создать общий базовый класс для хранения того же класса интерфейса в массиве.Однако универсальный класс должен возвращать переменную, специфичную для типа, основанную на его производной.
Я пробовал разные подходы к проектированию с шаблонами и вычетами типов ... Также пытался сохранить фактическое значение в контейнере вложенного класса.
Я думаю, мне нужен другой подход вместо решения этого ... Но я не знаю, что будет работать для меня.Любые разработанные шаблоны, которые могут использовать этот подход?
Базовый класс
class IAlpha
{
public:
virtual auto Get() = 0;
};
Производный класс
template< typename T >
class Alpha:
public IAlpha
{
T x;
public:
Alpha( T _x ):x(_x)
{
}
auto Get() ->decltype(x) override
{
return x;
}
};
Main
IAlpha *i = new Alpha<int>(1);
IAlpha *d = new Alpha<double>(1.0);
int x = i->Get();
double y = d->Get();
Ошибка Iget at IAlpha :: Get () «Функция с выведенным типом возврата не может быть виртуальной»
Я понимаю проблему, и ее можно решить, например,
virtual auto Get()->decltype( "TYPE" ) = 0;
Но проблема в том,Интерфейс не знает ТИПА, и он не должен поддерживать его универсальным ....
Обратите внимание, std::variant
& std::any
, к сожалению, нет вариантов в моем приложении.