Как правильно получить конкретный тип данных Type с помощью другого типа T в качестве шаблонного аргумента? Я написал следующий код, но он не компилируется: ```cpp template <typename T> struct param_type_trait<int> { using Type = TYPE_A; }; template <typename T> struct param_type_trait<float> { using Type = TYPE_B; }; template <class T> void registrate_param(...) { auto param = new_shared<param_type_trait<T>::Type>(); ... } ``` Компилятор GCC выдает ошибку "template parameters not deducible in partial specialization". Подскажите, как исправить эту ошибку и сделать код работоспособным.
Ошибка "template parameters not deducible in partial specialization" означает, что компилятор не может вывести или установить значение шаблонного параметра `T` в частичной специализации шаблона. В вашем коде у вас есть ошибки в определении шаблонов `param_type_trait`. Вместо `int` и `float` в качестве шаблонного параметра необходимо использовать `T`. Вот исправленный код: ```cpp template <typename T> struct param_type_trait { using Type = TYPE_A; // если T - int }; template <> struct param_type_trait<float> { using Type = TYPE_B; }; template <class T> void registrate_param() { using ParamType = typename param_type_trait<T>::Type; auto param = new ParamType(); // ... } ``` Теперь шаблоны `param_type_trait` корректно определены, и код должен компилироваться без ошибок. В функции `registrate_param` мы использовали `using` для определения псевдонима `ParamType`, который равен типу `Type` из `param_type_trait<T>`. Затем мы создаем экземпляр `ParamType`, используя оператор `new`. Обратите внимание, что я также удалил `...` в определении функции `registrate_param`. Если у вас есть какие-то другие аргументы для этой функции, вы можете добавить их в определение.
Во-первых, есть if constexpr, во-вторых std::enable_if
template <class T> void registrate_param() { if constexpr (std::is_same_v<T, int>) auto param = make_shared<int>(); else if (std::is_same_v<T, float>) auto param = make_shared<double>(); }
Ты можешь указать тип на прямую в шаблоне
template<int T> void Test();