有没有办法为cin添加缓冲,以便我可以有效地在istream上使用tellg和seekg? (我只需要返回大约6个字符。)或者是否有一些方法可以使用(可能是自定义的)istream对象来包装流,该对象充当缓冲管道,允许我使用tellg / seekg来恢复流位置几个字?它可能看起来像这样:
BufferedIStream bis(cin);
streampos pos = bis.tellg();
MyObjectType t = getObjectType(bis);
bis.seekg(pos);
作为一种解决方法,我目前正在将EOF读取为字符串,并将该字符串转换为istringstream,但这会产生许多我想避免的负面影响。 / p>
我能想到的另一件事就是在我的所有数据类上使用私有版本(仅供工厂使用)重载我的所有扫描/读取函数,其中假定标头已被消耗,因此我完全可以消除对tellg / seekg的需求。这样可以正常工作,但会引入相当多的丑陋。相比之下,tellg / seekg与我的工厂隔离,只有两行代码。我讨厌抛弃它。