Vì vậy, tôi có cây khổng lồ này về cơ bản là một chuyển đổi lớn/trường hợp với các phím chuỗi và các cuộc gọi chức năng khác nhau trên một đối tượng phổ biến tùy thuộc vào khóa và một phần siêu dữ liệu.Metaprogramming C/C++ sử dụng preprocessor
Mỗi entry về cơ bản trông như thế này
} else if (strcmp(key, "key_string") == 0) {
((class_name*)object)->do_something();
} else if (...
nơi do_something
có thể có lời gọi khác nhau, vì vậy tôi không thể chỉ cần sử dụng con trỏ hàm. Ngoài ra, một số phím yêu cầu đối tượng được truyền tới một lớp con.
Bây giờ, nếu tôi viết mã này bằng ngôn ngữ cấp cao hơn, tôi sẽ sử dụng từ điển lambdas để đơn giản hóa điều này.
Nó xảy ra với tôi rằng tôi có thể sử dụng các macro để đơn giản hóa này để một cái gì đó giống như
case_call("key_string", class_name, do_something());
case_call(/* ... */)
nơi case_call
sẽ là một vĩ mô mà sẽ mở rộng mã này vào đoạn mã đầu tiên.
Tuy nhiên, tôi rất nhiều trên hàng rào cho dù đó sẽ được coi là phong cách tốt. Ý tôi là, nó sẽ giảm công việc đánh máy và cải thiện DRYness của mã, nhưng sau đó nó thực sự có vẻ lạm dụng hệ thống macro một chút.
Bạn sẽ đi xuống con đường đó, hay đúng hơn là loại toàn bộ nội dung? Và lý do của bạn để làm như vậy là gì?
Sửa
Một số làm rõ:
Mã này được sử dụng như một lớp keo giữa một API kịch bản đơn giản mà truy cập các khía cạnh khác nhau của một C++ API thuộc tính quan trọng có giá trị như đơn giản. Các thuộc tính được thực hiện theo nhiều cách khác nhau trong C++ mặc dù: Một số có phương thức getter/setter, một số được đặt trong một cấu trúc đặc biệt. Các hành động script tham chiếu các đối tượng C++ được đúc vào một lớp cơ sở chung. Tuy nhiên, một số hành động chỉ khả dụng trên một số lớp con nhất định và phải được loại bỏ.
Xa hơn nữa trên đường, tôi có thể thay đổi API C++ thực tế, nhưng hiện tại, nó phải được coi là không thể thay đổi. Ngoài ra, điều này phải làm việc trên một trình biên dịch nhúng, do đó, tăng hoặc C++ 11 là (đáng buồn) không có sẵn.
Tại sao phiếu bầu đóng lại - đây là câu hỏi rất hợp lệ. Tôi đang thiếu gì ở đây? –
Đó là một câu hỏi hay, nhưng "Câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi hy vọng câu trả lời thường liên quan đến sự kiện, tài liệu tham khảo hoặc chuyên môn cụ thể; * câu hỏi này có khả năng thu hút ý kiến, tranh luận, tranh luận, bỏ phiếu hoặc mở rộng Thảo luận. * " – Fanael
Nó đã ở mức +5, vì vậy mà kinda nói rằng những người khác, bản thân tôi đã bao gồm, quan tâm đến kết quả. Câu trả lời dưới đây đã khá đẹp. –