C++ - шаблонная функция, которая может возвращать разные типы?

Я работаю над разделом кода, который позволяет пользователю выполнять поиск по различным типам (double/string/date(пользовательский класс)). Это включает в себя метод под названием readInSearchCriteria() что я пытался установить в качестве шаблона. Я провел некоторые исследования по шаблонным функциям, и вот что я сделал до сих пор:

//template function to process different datatypes
template <typename T> UserInterface::readInSearchCriteria() const {
    //template instance to hold data input from keyboard
    T t;
    //prompt user to enter a value
    cout << "\n ENTER SEARCH CRITERIA: ";
    //read-in value assigned to template variable
    cin >> t;

    //return initialised template variable
    return t;
}

Я назвал это в какой-то момент в программе, чтобы обработать double вот так:

double amount = theUI_.readInSearchCriteria<double>(); //works absolutely fine

Тем не менее, когда я попытался позвонить на stringМне выдал следующую ошибку компилятор:

не существует подходящего конструктора для преобразования из "int" в "std::basic_string, std::allocator>"

Кто-нибудь сможет дать мне какой-нибудь совет о том, что здесь может пойти не так?

2 ответа

У вас есть опечатка в объявлении функции: вы не указываете тип возвращаемого значения, поэтому компилятор по умолчанию int,

Вам нужно добавить T как тип возвращаемого значения:

template <typename T>
T UserInterface::readInSearchCriteria() const {
    ...
    return T
}

Метод readInSearchCriteria не имеет возвращаемого типа. Вы должны указать тип возвращаемого значения для функции, здесь это неявное int потому что вы не указали один.

template <typename T> T UserInterface::readInSearchCriteria() const;
Другие вопросы по тегам