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;