Задать вопрос
AtariSMN82
@AtariSMN82
Разработчик игр

C++: Как вывести один тип в зависимости от другого типа в шаблоне?

Я хочу получить конкретный тип данных Type с помощью другого типа T в качестве шаблонного аргумента, но не знаю как это сделать, мой код не работает:

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 пишет error: template parameters not deducible in partial specialization
Я не знаю как это делается правильно
  • Вопрос задан
  • 163 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
AtariSMN82
@AtariSMN82 Автор вопроса
Разработчик игр
Всё, я нашёл решение
template <class T>
struct trait {
  using Type = TYPE_C;
};

template <>
struct trait<float> {
  using Type = TYPE_B;
};

template <>
struct trait<int> {
  using Type = TYPE_A;
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ZhenyaMak
@ZhenyaMak
Писать качественный софт? Пфф, это не для меня.
Ты можешь указать тип на прямую в шаблоне
template<int T> void Test();
Ответ написан
@dima20155
you don't choose c++. It chooses you
Во-первых, есть 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>();
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы