Tôi muốn tìm hiểu cách sử dụng các chức năng liên kết. Dưới đây là ý tưởng: tôi có chức năng này mà mất các thông số:Cách sử dụng bind1st và bind2nd?
void print_i(int t, std::string separator)
{
std::cout << t << separator;
}
Và tôi muốn làm:
std::vector<int> elements;
// ...
for_each(elements.begin(), elements.end(), std::bind2nd(print_i, '\n'));
Nhưng nó không hoạt động!
Dưới đây là những gì tôi nhận được:
/usr/include/c++/4.3/backward/binders.h: In instantiation of ‘std::binder2nd<void()(int, std::string)>’:
main.cpp:72: instantiated from here
/usr/include/c++/4.3/backward/binders.h:138: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/backward/binders.h:141: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/backward/binders.h:145: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/backward/binders.h:149: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/backward/binders.h:155: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/backward/binders.h:140: error: field ‘std::binder2nd<void()(int, std::string)>::op’ invalidly declared function type
/usr/include/c++/4.3/backward/binders.h: In function ‘std::binder2nd<_Operation> std::bind2nd(const _Operation&, const _Tp&) [with _Operation = void()(int, std::string), _Tp = char]’:
main.cpp:72: instantiated from here
/usr/include/c++/4.3/backward/binders.h:164: error: ‘void()(int, std::string)’ is not a class, struct, or union type
/usr/include/c++/4.3/bits/stl_algo.h: In function ‘_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, _Funct = std::binder2nd<void()(int, std::string)>]’:
main.cpp:72: instantiated from here
/usr/include/c++/4.3/bits/stl_algo.h:3791: error: no match for call to ‘(std::binder2nd<void()(int, std::string)>) (int&)’
make: *** [all] Error 1
tôi có thể sử dụng functor, nhưng nó là nhanh hơn để sử dụng ràng buộc.
Cảm ơn!
Nó không liên quan đến câu hỏi, vì vậy, hãy nhận xét nhỏ. Mã ngắn nhất để xuất một dải có thể sao chép nó thành 'ostream_iterator', ví dụ: 'std :: copy (v.begin(), v.end(), std :: ostream_iterator (std :: cout," \ n "));'. –