@toster_bodnar

Как сохранить и получить потом шаблонный тип, переданный методу класса?

Есть два класса: контейнер с шаблонной функцией и класс который хранит экземпляр этого контейнера. Хочется как то иметь возможность сохранить в классе хранителе тип, передаваемый в шаблонную функцию, что бы потом иметь возможность повторно вызвать эту функцию с таким же типом.
Мой код
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 не получилось
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
template<typename T>
struct Base
{
   using USED_TYPE = T;

    T value;
};


а дальше всё очевидно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы