参考C++ format macro / inline ostringstream
有一个宏的问题是允许对象的内联连接来创建一个字符串,iostream风格。
答案是:
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream().seekp( 0, std::ios_base::cur ) << x ) \
).str()
用法(例如):
throw std::runtime_error(
SSTR( "FooBar error: Value " << x << " exceeds " << y )
);
这非常有效 - 与海湾合作委员会合作。它也在Visual C ++ 2005下编译和运行。但是对于后者,宏的所有用途都会导致空字符串,我对于为什么以及如何修复它感到非常傻眼......?
答案 0 :(得分:2)
不幸的是,我无法访问MSVC编译器进行测试。
在我过去使用微软工具的经验中,似乎微软将语言定义和标准视为粗略指南。 (我在项目上浪费了很多时间,只是为了发现微软打破了C99基本的传统。)
鉴于这种令人遗憾的情况,我建议你尝试一系列琐碎的程序。比如:
std::ostringstream() o;
o.seekp( 0, std::ios_base::cur ) << "foo";
cout << "Test1: " << o << endl;
或者也许:
std::ostringstream() o;
cout << "Test2: " << typeid(o).name() << endl;
cout << "Test3: " << typeid(o.seekp( 0, std::ios_base::cur )).name() << endl;
试着看看事情在什么时候停止工作。然后从那里解决问题。