Không tốn nhiều thời gian để xem xét mã nguồn tăng, ai đó có thể cho tôi một tóm tắt nhanh về cách liên kết tăng cường được thực hiện?Làm thế nào để tăng cường ràng buộc làm việc đằng sau hậu trường nói chung?
Trả lời
Tôi thích tác phẩm này của nguồn bind
:
template<class R, class F, class L> class bind_t
{
public:
typedef bind_t this_type;
bind_t(F f, L const & l): f_(f), l_(l) {}
#define BOOST_BIND_RETURN return
#include <boost/bind/bind_template.hpp>
#undef BOOST_BIND_RETURN
};
Cho bạn gần như tất cả các bạn cần phải biết, thực sự.
Tiêu đề bind_template
mở rộng thành danh sách các định nghĩa nội tuyến operator()
. Ví dụ, đơn giản nhất:
result_type operator()()
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
Chúng ta có thể thấy BOOST_BIND_RETURN
nở vĩ mô để return
vào thời điểm này do đó, dòng là giống như return l_(type...)
.
Một phiên bản tham số là ở đây:
template<class A1> result_type operator()(A1 & a1)
{
list1<A1 &> a(a1);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
Nó khá giống nhau.
Lớp listN
là trình bao bọc cho danh sách tham số. Có rất nhiều ma thuật sâu đang diễn ra ở đây mà tôi không thực sự hiểu quá nhiều. Chúng cũng đã quá tải operator()
gọi hàm unwrap
bí ẩn. Bỏ qua một số quá tải cụ biên dịch, nó không làm được rất nhiều:
// unwrap
template<class F> inline F & unwrap(F * f, long)
{
return *f;
}
template<class F> inline F & unwrap(reference_wrapper<F> * f, int)
{
return f->get();
}
template<class F> inline F & unwrap(reference_wrapper<F> const * f, int)
{
return f->get();
}
Việc đặt tên có vẻ là: F
là kiểu của tham số chức năng để bind
. R
là kiểu trả về. L
có xu hướng là danh sách các loại tham số. Ngoài ra còn có rất nhiều biến chứng vì không có ít hơn chín quá tải cho các số khác nhau của các tham số. Tốt nhất là không nên sống quá nhiều.
Tôi nghĩ rằng đó là một lớp mẫu tuyên bố biến thành viên cho các đối số bạn muốn ràng buộc và quá tải() cho phần còn lại của đối số.
Bằng cách này, nếu bind_t
tính được thu nhỏ và đơn giản hóa bằng cách bao gồm boost/bind/bind_template.hpp
, nó trở nên dễ hiểu như sau:
template<class R, class F, class L>
class bind_t
{
public:
typedef bind_t this_type;
bind_t(F f, L const & l): f_(f), l_(l) {}
typedef typename result_traits<R, F>::type result_type;
...
template<class A1>
result_type operator()(A1 & a1)
{
list1<A1 &> a(a1);
return l_(type<result_type>(), f_, a, 0);
}
private:
F f_;
L l_;
};
- 1. Làm thế nào để phù hợp với mô hình làm việc đằng sau hậu trường trong F #?
- 2. Đằng sau hậu trường: ORM "suy nghĩ" như thế nào?
- 3. Linq hoạt động như thế nào (phía sau hậu trường)?
- 4. Loại serialization nào sử dụng Wcf đằng sau hậu trường?
- 5. Hoạt động đằng sau hậu trường trên nhắc tải python
- 6. Quy trình Erlang đằng sau hậu trường là gì?
- 7. Làm thế nào để làm việc xung quanh giới hạn trong các ràng buộc loại chung trong C#?
- 8. C# ràng buộc không làm việc
- 9. Làm thế nào để xây dựng tăng cường libs tĩnh?
- 10. Truy vấn Nhóm LINQ Lớn, những gì đang diễn ra đằng sau hậu trường
- 11. Tăng cường việc sử dụng
- 12. Cách khai báo ràng buộc chung chung là loại chung
- 13. Làm thế nào để có được ToolTip ràng buộc để làm việc với một ComboBox?
- 14. Trong Ninject 2.0, làm thế nào để tôi có cả một ràng buộc chung và một ràng buộc cho một trường hợp specfic?
- 15. Làm thế nào để kết hợp việc sử dụng std :: ràng buộc với std :: shared_ptr
- 16. Khuôn khổ thực thể: Tuần tự hóa/Deserialize cột JSON đằng sau hậu trường
- 17. Typekit hoạt động như thế nào sau hậu trường?
- 18. Làm cách nào để chỉ định nhiều ràng buộc kiểu chung chung trên một phương thức?
- 19. làm việc xung quanh thiếu một phần chung suy luận kiểu với các ràng buộc
- 20. Ai đó có thể giải thích những gì đang diễn ra đằng sau hậu trường?
- 21. Làm thế nào để tăng cường tiến bộ trên danh sách HTML với angularjs?
- 22. Thực hiện tốt việc học tăng cường?
- 23. Làm thế nào để bạn vượt qua tăng :: ràng buộc đối tượng với một chức năng?
- 24. Làm cách nào để chỉ xây dựng các mô-đun bắt buộc tăng cường?
- 25. Làm thế nào để tăng :: tinh thần :: hold_any làm việc?
- 26. Làm thế nào để cấu hình xây dựng lười biếng hoặc gia tăng nói chung với Ant?
- 27. Làm thế nào tôi có thể ràng buộc một trường để một điều khiển người dùng
- 28. Làm cách nào để sửa đổi giá trị bị ràng buộc cho trường trong dạng bị ràng buộc trong django?
- 29. Giải thích tốt về cách thức hoạt động của đường ray đằng sau hậu trường?
- 30. C# Nhiều ràng buộc chung chung
này dường như không đơn giản đối với tôi ... tại sao là '# xác định BOOST_BIND_RETURN return' cần thiết? tại sao không chỉ trở lại? – Ha11owed
Tôi vẫn chưa hiểu. Cái gì gọi hàm tạo cho 'bind_t'? – ThomasMcLeod
@ Ha11owed vì cách đó họ có thể sử dụng tiêu đề cho các mẫu không có giá trị trả lại! –