parsing into private fields
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
Hướng nghiên cứu
Không có tệp mã nguồn hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu với ví dụ về bp::parse và rule, sau đó tìm hiểu cách Spirit.X3 xử lý các attribute và so sánh các cách tiếp cận friend-helper và Boost.Describe được đề xuất. Được xem là hoàn thành khi đã thống nhất một cơ chế để parse vào các trường private, với phạm vi và việc validation của cơ chế đó được bao phủ bởi các bài kiểm thử hoặc tài liệu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Currently my biggest gripe with Spirit.X3 is that you can't parse into a class with private fields. This leaves you with two options:
- use a proxy type, e.g.
class Myclass_impl {
public:
char c;
};
class Myclass : private Myclass_impl {
public:
Myclass_impl &base() { return *this; }
};
bp::rule<struct tag, Myclass_impl> rule{"rule"};
const auto rule_def = bp::char_;
BOOST_PARSER_DEFINE_RULES(rule);
void func() {
std::string str{"c"};
Myclass result;
bp::parse(str, rule, result.base());
}
- Just don't use private members, which means your parser is no longer a parser, just a validator.
1. makes public headers unreadable as users would have to look into implementation headers to see the actual class body, while
2. violates the parse, don't validate principle and thus allows for invalidly constructed objects that would never be returned from a successful parse.
Are there any plans to remedy this, e.g. via a Boost.Parser helper class that the user class could befriend, or via a specialization that grants access to the private members (Boost.Describe comes to mind) ?
Or am I just missing a workaround that everyone has been using for the past decade
- Ngôn ngữ chính
- C++
- Star
- 182
- Fork
- 28
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của boostorg/parser
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
-
Is Boost.Parser abandoned? Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 20/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
Tất cả issue của boostorg/parser
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
AXERA-TECH/ax-llm#77 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
games-on-whales/wolf#509 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
-
bug-unconfirmed
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
NVIDIA/cuda-samples#453 ·