Tôi muốn lưu bản thân mình một số cách gõ và do đó xác định một cái gì đó như thế này:C++ 11 - ràng buộc loại chức năng
using namespace std;
vector<MyClass> vec;
auto vecsort = bind(sort, vec.begin(), vec.end(), [] (MyClass const &a, MyClass const &b) {
// custom comparison function
});
vecsort(); // I want to use vecsort() a lot afterwards
Đối với một số lý do này không biên dịch - tại sao?
Sử dụng tăng không phải là một tùy chọn.
Minimal dụ làm việc:
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
vector<pair<int, int>> vec;
for (int i = 0; i < 10; i++)
vec.push_back(make_pair(10 - i, 0));
auto vecsort = bind(sort, vec.begin(), vec.end(), [] (pair<int, int> const &a, pair<int, int> const &b) {
return a.first < b.first;
});
vecsort();
}
Lỗi:
error: no matching function for call to 'bind(<unresolved overloaded function type>, std::vector<std::pair<int, int> >::iterator, std::vector<std::pair<int, int> >::iterator, main()::__lambda0)'
Có thông báo lỗi không. –
@ R.MartinhoFernandes Có, và như mọi khi với C++ nó rất khó hiểu. Tôi đã bao gồm một ví dụ làm việc tối thiểu, mặc dù. – ryyst
@ryyst: Cho chúng tôi biết thông báo lỗi. BTW ví dụ làm việc tối thiểu của bạn không hoạt động như nó thiếu bao gồm. –