我正在尝试制作一个通用的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;
}
有什么办法吗?
我知道这个功能很笨,但我只想把它用于竞争性编程。
通常它由辅助函数完成:
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
的更多特化。