Tôi chỉ thấy mình tạo ra một lớpTôi có đang phát minh lại bánh xe với lớp chuyển tiếp cuộc gọi phương thức tầm thường này không?
template <typename T> struct invoker {
void operator()(T& it) const {it();}
};
để tôi có thể vượt qua một invoker<foo>
một cái gì đó (mà không phải là dưới sự kiểm soát của tôi) có nhu cầu gọi invoker<foo>::operator()(foo&)
vào nó nhiều lần với foo
trường hợp khác nhau, để làm cho nó chuyển tiếp các cuộc gọi đó đến phương thức foo::operator()()
của foo
.
Tôi biết nó chỉ là một vài dòng, nhưng điều này có vẻ như là loại điều mà có thể đã được cung cấp bởi chức năng của STL, hoặc boost::bind
bằng cách nào đó. Ngoại trừ tôi không thể nhìn thấy lừa, nếu có một. (Tôi chắc chắn rằng tôi không phải là người đầu tiên sử dụng một cái gì đó rất như thế này; nó có một cái tên?)
tôi nghĩ rằng C++ 11 có thứ gì đó cho điều này quá – pyCthon
Hiện tại tôi đang ở trên g ++ 4.4.5; Tôi không nghĩ rằng g ++ có lambdas cho đến khi 4,5. Tò mò để xem một giải pháp lambda nếu một trong những được đăng mặc dù; Tôi có thể sống với lớp invoker của tôi cho đến khi nâng cấp phiên bản g ++. – timday
Tại sao bạn không gọi 'foo :: operator() 'trực tiếp? Tôi có nghĩa là, các lớp mà gọi là 'invoker :: operator() 'đã làm một cái gì đó như' some_invoker (some_foo); ', trong khi bạn chỉ có thể gọi nó như thế này:' some_foo(); '. Bạn đang thêm một lớp không cần thiết của indirection. – mfontanini