2009-04-23 35 views
5

Tôi đang tìm kiếm một thư viện Dmẫu để lấy một biến tùy ý và so sánh nó thành một gói có thể vận chuyển. Biến có thể là loại giá trị cơ bản (int, char[], real) hoặc có thể là struct hoặc class và thậm chí có thể chứa hoặc là loại tham chiếu. Một hệ thống có thể làm điều này mà không cần bất kỳ sự giúp đỡ nào cho mỗi kiểu sẽ tốt đẹp nhưng tôi nghi ngờ rằng nó đòi hỏi nhiều nên tôi sẽ hài lòng với thứ gì đó sử dụng chú thích trọng lượng nhẹ.Tôi cần một khung tuần tự hóa cho D

Nếu không có điều gì giống như vậy tồn tại các đề xuất về cách cấu trúc nó sẽ đẹp. Tôi có thể nghĩ ra một vài cách để thực hiện việc khử trùng nhưng tôi không chắc chắn cách chỉ định các chú thích.

Bối cảnh: Sau khi cố gắng sử dụng dịch vụ web ASMX và WCF và không thích chúng, tôi đang chặt giống như tôi muốn thử sức với vấn đề RPC.

chỉnh sửa: BTW Tôi không quan tâm nhiều định dạng ở giữa là (XML, JASON, YAML, nhị phân) miễn là nó di động.

Trả lời

1

Tôi khuyên bạn nên viết của riêng bạn, vì nó là một bài tập hữu ích trong khuôn mẫu và giúp bạn thích ứng với định dạng tuần tự hóa theo yêu cầu cụ thể của bạn.

Bạn có thể muốn xem xét tools.serialize (http://dsource.org/projects/scrapple/browser/trunk/tools/tools/serialize.d) làm điểm bắt đầu.

[sửa] SORRY! Không nhận ra đó là bạn! : D

+0

Thật buồn cười khi bạn chỉ vào trang web của riêng bạn trong trình trả lời cho câu hỏi bạn đặt ra. (OTOH, ít nhất tôi không viết như vậy sẽ gây khó chịu;) – BCS

3

Hãy xem Google Protocol Buffers. Có lẽ bạn có thể sử dụng C++ hoặc C bindings trực tiếp, hoặc viết D bindings mình.

+0

Tôi đoán tôi chỉ đặt nó vào các thẻ nhưng tôi đang tìm một giải pháp lập trình meta, e.i. các hàm mẫu. OTOH nó có thể là mát mẻ để thêm hỗ trợ D cho điều đó. – BCS

+1

Là tác giả của một trong các cổng C# (vì vậy tôi biết cái gì là/không liên quan), tôi sẽ đề xuất chính xác điều đó (tức là viết một phiên bản D). +1 –

+0

@Marc, bạn có liên kết tới phiên bản C# của mình không? – BCS

2

Đây là cơ bản tôi đã viết cho D 1.x. Nó đã được viết khá lâu rồi, vì vậy có thể cải thiện nó, nhưng nó không hoạt động. Các định dạng thực tế về cơ bản là mạng nhị phân thứ tự byte, vì vậy nó sẽ an toàn để lưu trữ và chuyển các byte.

http://gist.github.com/100885

Nó không hỗ trợ các lớp học hoặc con trỏ tùy ý. Để làm điều đó đúng cách, bạn muốn một cái gì đó ghi nhớ những gì tài liệu tham khảo đã được đăng. Nếu bạn giới hạn bản thân với các loại giá trị, mảng và AA, nó sẽ thực hiện công việc.

Nếu bạn muốn mở rộng nó để hỗ trợ các lớp học, lời khuyên của tôi là yêu cầu phương thức toStream và fromStream được xác định.

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