2010-10-05 51 views
5

Tôi đang tìm kiếm một API có thể được sử dụng để đổ hầu hết các cấu trúc dữ liệu, có một trong c/C++ không?Có cái gì như var_dump của PHP trong c/c + +?

+0

Tôi không nghĩ như vậy. C/C++ không được thiết kế cho loại công cụ này. Tốt nhất bạn chỉ cần nhìn nó lên trên internet những gì các kiểu dữ liệu khác nhau có thể làm, vv. –

Trả lời

1

tăng có thư viện tuần tự hóa mà bạn có thể sử dụng rõ ràng để làm cho cấu trúc dữ liệu của bạn có thể bán được.

Nếu bạn muốn điều đó xảy ra tự động hơn, các tùy chọn của bạn bị ảm đạm. Một chương trình C++ có thể kiểm tra các biểu tượng gỡ lỗi của chính nó, hoặc biên dịch một số mã bổ sung - có thể được tạo tự động với tham chiếu đến đầu ra GCC-XML hoặc sử dụng một công cụ như OpenC++ để tự động tạo một số siêu dữ liệu.

3

Tôi đang tìm kiếm một API có thể được sử dụng để đổ hầu hết các cấu trúc dữ liệu, có một trong c/C++ không?

Câu trả lời ngắn gọn: Không, không có.

Câu trả lời dài hơn: C++ không có phản ánh. Đó là, không có cách nào để phân tích các cấu trúc dữ liệu không xác định khi chạy. Bạn sẽ phải tự viết các thói quen kết xuất cho bất kỳ cấu trúc dữ liệu nào bạn muốn đổ, xây dựng trên những gì có sẵn cho các thành viên dữ liệu của nó.

Tuy nhiên, lưu ý rằng C++ có rất nhiều công cụ để giúp bạn dễ dàng hơn. Ví dụ, cho một đơn giản generic dump() mẫu:

template< typename T > 
inline void dump(std::ostream& os, const T& obj) {os << obj;} 

các yếu tố của bất kỳ chuỗi có thể được đổ sử dụng chức năng đơn giản này:

template< typename OutIt > 
void dump(std::ostream& os, OutIt begin, OutIt end) 
{ 
    if(begin != end) 
    os << *begin++; 
    while(begin != end) { 
    os << ", "; 
    dump(*begin++); 
    } 
} 
+0

Cần một chuyên môn cho 'std :: pair <>' để kết xuất tập hợp <> s và map <> s. Một số biến chứng, ví dụ: các chuỗi thoát, độ chính xác của dấu phẩy động .... –

+0

@Tony: Vâng, đối với các bản đồ và các bản đồ đa giác (không phải cho các bộ, mặc dù) thực sự là một quá tải cần thiết. (Không có chuyên môn hóa, BTW, vì đây sẽ là một chuyên môn _partial_, mà chúng tôi không có cho các mẫu chức năng, vì có quá tải ...) Và, vâng, đối với một số loại khác, bạn có thể muốn thêm quá tải. Tuy nhiên, tôi cố tình để lại một ví dụ đơn giản. Nó đã được bạn khá xa như nó được. – sbi

Các vấn đề liên quan