Có, hoặc bạn sẽ viết như thế nào, một lớp metafunction kiểm tra xem một lớp có tương thích với boost::range
không? Tôi muốn sử dụng boost::enable
thành ngữ, một cái gì đó giống nhưMetafunction để kiểm tra xem đối tượng có tương thích với phạm vi tăng
template <typename T>
Constructor::Constructor(const T& t, __attribute__((unused)) typename boost::enable_if<is_range_compatible<T> >::type* aux=NULL)
cho một is_range_compatible
metafunction thích hợp. Tôi biết về is_container từ pretty_print, chụp rất nhiều trường hợp, nhưng không phải mọi thứ hoạt động với boost::range
.
Chỉnh sửa Điều này đang sử dụng C++ 03, vì vậy tôi không có quyền truy cập vào các tính năng C++ 11. Tôi đang sử dụng cũ, gcc 4.1 và tăng 1.51.
Boost đã có một giải pháp: [. các khái niệm kiểm tra] (http://www.boost.org/doc/ libs/1_54_0/libs/range/doc/html/range/concepts/concept_checking.html) – jrok
Dường như tương tự như [câu hỏi này] (http://stackoverflow.com/questions/14439479/detecting-whether-something-is -boost-range-with-sfinae) – llonesmiz
Bạn có quyền truy cập vào C++ 11 hay không? Bởi vì meta-lập trình là hơi dễ dàng hơn với 'decltype' và trả về muộn. –