Как преобразовать строку в шаблонный тип в C ++

Я хочу прочитать и анализировать текстовый файл в C ++ в общем порядке. Файл всегда выполнен из пар ключей, по одному на линию. Ключ шаблон, а также значение. Я предвидел ключ и значения всегда быть основным типом (INT, FLOAT, String).

Моя проблема в том, что я не знаю, как создать преобразование ключа или строка значения в правильный тип.

Я попробовал следующее:

template<class Key, class T> inline
void EventReportReader<Key, T>::validateFileFormat()
{
    // Read file line by line and check that the first token is of type Key and the second one of type T

    std::string line;
    try {
        boost::regex re( "(\\S+)\\s+(.*)" );
        while( getline( inStream_, line ) ) {
            boost::cmatch matches;
            if( boost::regex_match( line.c_str(), matches, re ) ) {
                std::cout << re << " matches " << line << std::endl;
                std::cout << "   1st : " << matches[1] << "\n   2nd : " << matches[2] << std::endl;
                // test types
                Key *k = dynamic_cast<Key*>(&matches[1]);
                T t = dynamic_cast<T>(matches[2]);
            }
        }
    }
    catch( boost::regex_error& e ) {
        // todo problem with regular expression, abort
    }
}

и использование этого метода следуют следующим образом:

// This in turn calls the method validateFileFormat
EventReportReader<float, int> reader( testFileName );

Результат

/home/vonhalle/dev/eventbasedreport/libs/event_based_report/eventreportreader.h:121:60 . :: sub_match & '(из типа' Const Struct Boost :: sub_match ') для типа float ' (цель не указатель или ссылка на класс) /home/vonhalle/dev/eventbasedreport/libs/event_based_report/eventreportreader.h:122:53: Ошибка: Не удается dynamic_cast 'matches.boost :: match_results :: Оператор [] с бидом = chang char *, allocator = std :: allocator >, Boost :: Match_Results :: Const_Reference = Const Boost :: sub_match & '(типа' Const Struction Boost :: sub_match ') Чтобы ввести «int» (цель не указатель или ссылка)

Как мне это сделать? Это даже возможно?

Редактировать: Файл может выглядеть так, если шаблон

1.14 5
2.34 78
0.56 24

или это, если шаблон

23 asdf
45 2222
1 bbbb

edit2:

Заявление о проблеме выше, частично неверно. Ключ никогда не является строкой, значение может быть строкой. Следовательно, все, что до первого пространства является ключом, а остальное - это значение. Извините за эту ошибку.

5
задан Barth 31 August 2011 в 11:32
поделиться