如果你想要的只是 bool 和其他类型的相同接口,那么包装很容易。
template <typename T>
T read(std::istream& stream)
{
T value;
stream >> value; // TODO: guard against failure of extraction, e.g. throw an exception.
return value;
}
但是,直接使用它需要您指定类型。
for (int i=0; i < someIntVector.size(); i++)
{
someIntVector[i] = read<int>(someStringStream);
}
for (int i=0; i < someBoolVector.size(); i++)
{
someBoolVector[i] = read<bool>(someStringStream);
}
如果您对几个不同的向量重复使用它,只需再次包装它:
template <typename T, typename A>
void fillVectorFromStream(std::istream& stream, std::vector<T, A>& vector)
{
for ( int i = 0; i < vector.size(); ++i )
{
vector[i] = read<T>(stream);
}
}
因此,用法简单地变成
fillVectorFromStream(streamOfBool, vectorOfBooleanValues);
fillVectorFromStream(streamOfIntegers, vectorOfIntegers);