Tôi có một vùng chứa con trỏ mà tôi muốn lặp lại, gọi hàm thành viên có tham số là tham chiếu. Làm thế nào để làm điều này với STL?std :: for_each, gọi hàm thành viên với tham số tham chiếu
Giải pháp hiện tại của tôi là sử dụng boost :: bind và boost :: ref cho tham số.
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
Câu hỏi liên quan (từ đó tôi lấy được giải pháp hiện tại của tôi từ) là boost::bind with functions that have parameters that are references. Điều này đặc biệt yêu cầu làm thế nào để làm điều này với tăng. Tôi hỏi làm thế nào nó sẽ được thực hiện mà không cần tăng.
Chỉnh sửa: Có cách để làm điều tương tự này mà không cần sử dụng bất kỳ boost
nào. Bằng cách sử dụng std::bind
và bạn bè cùng mã có thể được viết và biên soạn trong một trình biên dịch 11-tương thích C++ như thế này:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
boost :: bind (& Renderable :: render, _1, boost :: ref (g)) có lẽ nên được tăng :: bind (& Renderable :: render, boost :: ref (g), _1) – Carl
@carleeto Tốt bắt lấy. Cố định sau 4 năm sai! –