Есть два класса: контейнер с шаблонной функцией и класс который хранит экземпляр этого контейнера. Хочется как то иметь возможность сохранить в классе хранителе тип, передаваемый в шаблонную функцию, что бы потом иметь возможность повторно вызвать эту функцию с таким же типом.
Мой кодclass Container
{
public:
Container() = default;
virtual ~Container() = default;
template<typename T, typename ...Args>
void set(Args...args){...};
template<typename T>
T* get(){...};
....
};
template<typename T>
struct Base
{
T value;
};
class Application
{
public:
Application() = default;
virtual ~Application() = default;
template<typename T, typename ...Args>
void foo(Args ...args)
{
container.set<Base<T>>(args...);
}
void bar()
{
auto variable = container.get<Base<????>>(); // вот тут тип вставленный в контейнер неизвестен, как его узнать?
// тут что то делаем с variable
}
private:
Container container;
};
// и потом где то в программе
{
Application app;
app.foo<Base<MyType>>(...);
app.bar();
}
Есть рабочий вариант с тем, чтобы класс Application сделать тоже шаблонным и передавать туда тот же MyType. Но это не подходит, потому как хочется иметь возможность пихать в контейнер разные типы, ну и лучше бы Application оставить не шаблонным. Пробовал так же в классе Application хранить переменную с типом std::any и в функции foo() делать для нее
tmp = std::make_any<T>();
но достать из tmp нужный тип, что бы потом использовать его в container.get не получилось