我正在解析来自“C-only”接口的文本数组,其中每个字符串可能有任意数量的值,这些值可以单独地被“ istream::operator >>()
”解析。
例如,其中一个解析器用于自定义 IPv4 类:
std::istream & operator >>( std::istream& stream, IPv4 &var )
实现非常明显。
现在假设输入如下:
const char *string_array[] =
{
"192.168.0.1, 192.168.0.32, 192.168.0.40",
"169.254.3.18, 169.254.3.19, 169.254.3.20, 169.254.3.21",
"10.0.92.100",
"10.0.0.101, 10.0.0.102, 10.0.0.103 , 10.0.0.104 , 10.0.0.110 ",
};
我想找到一种优雅的方式将所有解析的值放在一个数组中,以便我可以将它发送到“仅 C”函数。
天真的方法是首先const char *
用 a 连接所有字符串 (),stringstream
然后用 my 循环遍历这个流operator >>
。
std::stringstream ss;
IPv4 ip;
std::vector< IPv4 > ip_vector;
for ( int c = 0; c < count; ++c )
ss << string_array[ c ] << ", ";
while ( ss.good( ) )
{
ss >> ip;
ip_vector.push_back( ip );
}
对我来说似乎不是那么明智,但我不知道如何让它更聪明。
另请注意:Boost 不是此解决方案的选项。