Mã sau sẽ không biên dịch. Trình biên dịch phàn nàn về * không có hàm phù hợp để gọi for_each *. Tại sao cái này rất?Tại sao không thể cấu trúc được định nghĩa bên trong một hàm được sử dụng như hàm functor thành std :: for_each?
#include <map>
#include <algorithm>
struct Element
{
void flip() {}
};
void flip_all(std::map<Element*, Element*> input)
{
struct FlipFunctor
{
void operator() (std::pair<Element* const, Element*>& item)
{
item.second->flip();
}
};
std::for_each(input.begin(), input.end(), FlipFunctor());
}
Khi tôi di chuyển struct FlipFunctor
trước khi chức năng flip_all
, mã biên dịch.
thông báo lỗi đầy đủ:
no matching function for call to ‘for_each(std::_Rb_tree_iterator<std::pair<Element* const, Element*> >, std::_Rb_tree_iterator<std::pair<Element* const, Element*> >, flip_all(std::map<Element*, Element*, std::less<Element*>, std::allocator<std::pair<Element* const, Element*> > >)::FlipFunctor)’
C++ 03: * Gần như * cho phép bạn định nghĩa thuận tiện các trình đặc biệt quảng cáo gần các điểm sử dụng của chúng. :-P –