次の小さなプログラムでは、inputString を空白で読み取りたいと考えています。
#include <string>
#include <sstream>
#include <iostream>
int main( int argc , char ** argv ) {
std::string inputString(" ITEM ");
std::istringstream inputStream( inputString );
//Template:
T value;
inputStream.unsetf(std::ios::skipws);
inputStream >> value;
std::cout << "Value: [" << value << "]" << std::endl;
std::cout << "StringPos: " << inputStream.tellg() << std::endl;
std::cout << "State: " << inputStream.good() << std::endl;
}
これにより、次の出力が生成されます。
Value: []
StringPos: -1
State: 0
unsetf() 呼び出しを削除すると、代わりに次のようになります。
Value: [ITEM]
StringPos: 4
State: 1
つまり、空白が無視された場合は期待どおりです。だから - 明らかに、「空白をスキップしない」設定に何か問題があります。任意のヒント?
編集:テンプレートのような「T値」を追加した後、例はコンパイルされなくなりました。しかし、それは重要です
inputStream >> value;
動作します。次のメタコードも同様に機能するはずです。
if is_string(T)
value = inputString; // String values are assigned directly
else
inputStream >> value; // Other types.
ヨアキム