У меня есть шаблонный класс
template <typename T>
class Factors
{
public:
Factors(){};
deque<string> stringsDeck;
// some methods and variables here
map <string, string> getNext();
};
Метод getNext
объединяет строку, используемую в качестве ключа, со строками из stringsDeck
, используемыми в качестве значения, и возвращает map <string,string>
.
При условии, что у меня есть шаблонизированные функции stringify
и string2num
, я хотел бы иметь метод map<string,Scalar> getNext()
, который для любого другого типа, кроме строковых, преобразует значения карты в указанный тип шаблона T
.
Компилятор не позволяет мне перегружать два метода с одинаковым именем, но с разным типом возвращаемого значения, а именно:
map <string, T > getNext()
{
// converts the values of getNext() return map into the specified type T
return convertedMapWithValuesOfTypeT;
}
Каким может быть решение в этом случае? Я хотел бы сохранить имя метода одинаковым для строковых и других типов (в основном числовые типы, которые можно преобразовать из строки с помощью лексического приведения)