2010-04-07 51 views
6

Có thể trong C++ để xác định số biến/trường trong lớp chung không? ví dụ:Lập trình meta mẫu C++, số biến thành viên?

// suppose I need metaclass number_members determines number of members 

struct example { int i, j; }; 
assert(number_members<example>::value==2); 

Tôi đã xem qua mpl nhưng không thể tìm thấy triển khai.

cảm ơn.

+0

Tại sao bạn muốn biết có bao nhiêu người không biết chúng là gì? – Potatoswatter

+0

Tôi biết làm thế nào để làm việc với các loại, tôi không quen thuộc với các khía cạnh khác và các tính năng của mẫu meta-lập trình như này – Anycorn

Trả lời

7

Không. C++ không cung cấp cái nhìn chung về cấu trúc.

Bạn có thể thử C ++0x std::tuple, có một số tính năng của POD chung struct. Hoặc, cố gắng cuộn của riêng bạn từ thư viện Boost MPL. Đó sẽ là một chút tiên tiến nếu bạn chỉ mới bắt đầu với C++.

+1

Ngoài ra nhìn vào Boost.Fusion trong khi bạn đang ở đó. Đó là một cách hay để trộn các mẫu và mã thời gian chạy. Tôi đã sử dụng cá nhân 'boost :: fusion :: map' như một bộ xương cho' struct'/'class' khi tôi cần simili-reflection. –

1

Không. Thật không may, C++ không có loại nội trang dựng sẵn đó. Tuy nhiên, với một số tiền xử lý bổ sung chẳng hạn như Qt 's Meta Object Compiler (moc), bạn có thể đạt được điều gì đó tương tự ... lớp QMetaObject cung cấp propertyCount(); tuy nhiên, lớp học của bạn sẽ cần phải kế thừa từ QObject, sử dụng macro Q_OBJECT và đăng ký thuộc tính cho tất cả những thứ đó hoạt động ... vì vậy, trong ngắn hạn, nó không tự động.

1

Bạn không thể thực hiện việc đó trực tiếp. Câu hỏi rõ ràng sau đó, là những gì bạn đang cố gắng để đạt được - rất có thể là bạn có thể làm những gì bạn cần, nhưng cách để làm điều đó có thể khá khác nhau.

+1

thực sự, không thực sự cố gắng làm bất cứ điều gì cụ thể. Chỉ cần suy nghĩ làm thế nào tôi có thể làm điều đó và nhận ra tôi không biết làm thế nào, quyết định đặt một câu hỏi. chỉ cố gắng tìm hiểu các khía cạnh bổ sung. – Anycorn

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