У меня есть следующие вопросы: У меня есть карта от string
до string
, которая называется psMap
. т.е. psMap["a"]="20", psMap["b"]="test", psMap["c"]="12.5", psMap["d"]="1" (true)
поэтому на карте хранятся строковые выражения различных типов базовых данных.
Следующая функция foo
должна (с учетом ключа) скопировать сопоставленное значение в переменную соответствующего типа, т.е.
int aa;
foo("a", aa);
=> aa=20.
В явном виде я хочу иметь одну функцию для всех возможных типов данных (поэтому без ручного приведения), поэтому я попытался использовать шаблоны, использующие автоматическое преобразование istringsteram
, а именно
template<class PARAMTYPE>
void foo(string _name, PARAMTYPE& _dataType) {
PARAMTYPE buff;
istringstream(psMap[_name]) >> buff;
_dataType = buff;
}
Проблема в том, что операция ">>" выдает ошибку: Error: no match for »operator>>« in »std::basic_stringstream<char>((* ....
Что здесь происходит не так? stringstream
не распознает правильный тип данных и пытается передать абстрактный тип «шаблона»? Как я могу заставить мой код работать?
Спасибо за ваши старания :)
>> *buf
и*_dataType = *buff;
. - person Me myself and I   schedule 31.01.2014buff
кажется бесполезным, используйтеdataType
напрямую. - person Jarod42   schedule 31.01.2014