如何在c ++中创建泛型stringToVector函数?

问题描述 投票:2回答:1

我正在尝试制作一个通用的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;
}

有什么办法吗?

我知道这个功能很笨,但我只想把它用于竞争性编程。

c++ generics vector
1个回答
3
投票

通常它由辅助函数完成:

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::stringint之外的任何其他类型,但如果您需要支持其他类型,您可以添加my_convert的更多特化。

© www.soinside.com 2019 - 2024. All rights reserved.