пользователь выбирает тип массива из меню c ++

0

Я создал универсальный массивный шаблон для создания массивов разных типов. Теперь мне нужно получить пользовательский ввод из меню о том, какой тип массива они строят. Я попробовал ввести пользователя в число и использовать это число, чтобы выбрать строку из массива константных строк. Но довольно очевидно, что это привело к ошибке преобразования типа. Есть ли способ преобразовать литеральную строку типа в нее типа или напрямую обратиться к типу. Благодарю!

Вот код, который мне нужен, чтобы соответствовать типу во время выполнения:

SimpleVector<TYPE> myVect = SimpleVector<TYPE>(dataSize);

Я также пробовал этот оператор switch, который мне бы хотелось лучше, но я получаю ошибку переопределения.

switch (dataChoice) {
        case 1:
            SimpleVector<int> myVect = SimpleVector<int>(dataSize);
            break;
        case 2:
            SimpleVector<double> myVect = SimpleVector<double>(dataSize);
            break;
        case 3:
            SimpleVector<string> myVect = SimpleVector<string>(dataSize);
            break;
        default:
            break;
 }
  • 0
    Шаблоны - это время компиляции, нет способа указать их параметры во время выполнения.
  • 0
    Это первый раз, когда я использовал шаблоны, но я создал класс и проверил его с различными типами данных, и он работал нормально. Теперь согласно требованиям я должен позволить пользователю выбрать, какой тип данных он хочет ввести из меню. Нет способа сделать это? Я думаю, мне придется проверить, кто когда-либо написал требования к назначению и посмотреть, что они ожидают. Спасибо!
Показать ещё 1 комментарий
Теги:
types

1 ответ

0
Лучший ответ

Чтобы избавиться от ошибки переопределения, вы должны заключить определение типа внутри фигурных скобок

 switch (dataChoice) {
        case 1:
            {
              SimpleVector<int> myVect = SimpleVector<int>(dataSize);
              break;
            }
        case 2:
            {            
               SimpleVector<double> myVect = SimpleVector<double>(dataSize);
               break;
            }
        default:
            break;
  }

ТИП - это то, что компилятор должен знать во время компиляции: когда вы пытаетесь использовать строковое значение вместо типа, компилятор отказывается сотрудничать.

См. Что означает шаблон <unsigned int N>?

  • 0
    такое простое решение моей проблемы, лол. Это сработало, но мне пришлось дублировать тонну кода под каждый случай. Я не уверен в более чистом подходе, который мог бы использовать, но я отвечал всем требованиям, которые мне нужно было выполнить. Спасибо за помощь и поделился этой информацией, сбивающей с толку, но она кажется действительно мощной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню