「C-only」インターフェイスからのテキストの配列を解析しています。各文字列には、「istream::operator >>()
」によって単独で解析できる任意の量の値が含まれている可能性があります。
たとえば、パーサーの 1 つはカスタム 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 はこのソリューションのオプションではありません。