我正在寻找一种可用于转储大多数数据结构的API,c / c ++中是否有一个?
答案 0 :(得分:3)
我正在寻找一种可用于转储大多数数据结构的API,c / c ++中是否有一个?
简短回答:不,没有。
更长的答案:C ++没有反射。也就是说,无法在运行时分析未知数据结构。您必须自己为要转储的任何数据结构编写转储例程,并根据其数据成员可用的内容构建。
但请注意,C ++有很多工具可以让它更容易。例如,给定一个简单的通用dump()
模板:
template< typename T >
inline void dump(std::ostream& os, const T& obj) {os << obj;}
任何序列 的元素可以使用这个简单的函数转储:
template< typename OutIt >
void dump(std::ostream& os, OutIt begin, OutIt end)
{
if(begin != end)
os << *begin++;
while(begin != end) {
os << ", ";
dump(*begin++);
}
}
答案 1 :(得分:1)
boost有一个序列化库,您可以明确地使用它来使您的数据结构可转储。
如果您希望它更自动地发生,您的选择是暗淡的。 C ++程序可以检查自己的调试符号,或者编译一些额外的代码 - 可能是参考GCC-XML输出自动生成的,或者使用像OpenC ++这样的工具来自动生成一些元数据。