我正在尝试编写一个函数,该函数将一个字符串作为输入参数,三个可以是不同类型的输出参数(至少是这样的想法)和一个作为分隔符的字符。
输入字符串由指定的字符分隔,并且该函数按顺序将每个以字符结尾的字段分配给每个输出参数(目前它处理输入字符串,例如"a;bb;ccc"
并且仅限于三个输出参数,但这不是问题)。
例如,对于输入,例如10;200;3000
Id get 10
,200
以及3000
分别用于第一个、第二个和第三个输出参数
输出参数必须是字符串或整数类型,但由于我对 C++(尤其是泛型编程)的了解有限,我在编写一个不关心这一点的泛型函数时遇到了麻烦。
我有以下代码:
template <typename T>
void parse_string (std::string &input, T &out1, T &out2, T &out3, const char delimiter)
{
while (out3 == "")
{
std::string temp = input.substr(0, input.find(delimiter));
input = input.substr(input.find(delimiter) +1);
if (out1 == "") { out1 = temp;}
else if (out2 == "") { out2 = temp;}
else { out3 = temp;}
}
}
它适用于字符串,但显然不适用于整数。
我怀疑我在检查参数是否为空的地方出错了(以及我不知道的其他部分)。
你能帮我改进一下吗?
此外,我欢迎任何关于改进逻辑本身的想法(也许我需要使用可变参数模板以使参数的数量灵活,但如果 C++11 标准适用,我必须与我们的技术负责人核实好的)。
理想情况下,我想避免我有两次完全相同的函数但每种类型都有不同的签名(一个用于字符串,一个用于整数)的情况。
提前谢谢了!