Как сделать универсальную функцию stringToVector в C ++? - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь создать универсальную функцию stringToVector.

Входные данные представляют собой строку, содержащую несколько int или строку, разделенную запятой (давайте проигнорируем char)

ex) [1, 5, 7] или [convert, to, string, vector]

Я хочу универсальную функцию, подобную этой

template <class T>
vector<T> stringToVector(string input) {
    vector<T> output;
    input = input.substr(1, input.length() - 2);

    stringstream ss;
    ss.str(input);
    T item;
    char delim = ',';
    while (getline(ss, item, delim)) {
        if (is_same(T, int)) {
            output.push_back(stoi(item));    // error if T is string
        } else {
            output.push_back(item);          // error if T is int
        }
    }

    return output;
}

Есть ли способ обойти?

Я знаю этофункция тупая, но я просто хочу это для соревновательного программирования.

1 Ответ

3 голосов
/ 23 апреля 2019

Обычно это делается вспомогательной функцией:

template<class T>
T my_convert( std::string data );

template<>
std::string my_convert( std::string data )
{
    return data;
}

template<>
int my_convert( std::string data )
{
    return std::stoi( data );
}

внутри вашей функции:

str::string str;
while (getline(ss, str, delim))
   output.push_back( my_convert<T>( std::move( str ) ) );

не удастся скомпилировать для любого другого типа, кроме std::string или int но вы можете добавить больше специализаций my_convert, если вам нужно поддерживать другие типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...