Vấn đề: Mã sau đây sẽ rất rõ ràng và ngắn gọn, nếu không nhất thiết phải nhanh, không phải là vì nó không biên dịch.Làm thế nào để làm việc xung quanh thực tế là std :: function không có toán tử ==?
Nó không biên dịch vì bạn không thể so sánh std :: trường hợp hàm với toán tử ==(). Và std :: find() cố gắng làm chính xác điều đó.
Tất nhiên, tôi có thể thực hiện một loại triển khai hoàn toàn khác, nhưng cứng đầu như tôi và thích thú với mã bên dưới, tôi đang tìm kiếm thứ "gần nhất có thể" hoạt động.
Ai có thể cung cấp cho tôi một đoạn mã khá viết lại dưới đây cũng thực hiện điều tương tự?
#include <functional>
#include <vector>
typedef std::function<bool(int)> Tester_t;
typedef std::vector<Tester_t> TesterSet_t;
bool Test(TesterSet_t &candidates, int foo)
{
TesterSet_t dropouts;
for(auto& tester : candidates)
{
if(!tester(foo))
{
droputs.push_back(tester);
}
}
while(!dropouts.empty())
{
// The following line is not compiling because std::function has no operator==()
TesterSet_t::iterator culprit =
std::find(candidates.begin(), candidates.end(), dropouts.back());
candidates.erase(culprit);
dropouts.pop_back();
}
return !candidates.empty();
}
Bạn có thể mô tả vấn đề cơ bản mà bạn đang cố giải quyết không? Lý do 'std :: function' không có toán tử' ==' là bởi vì nó không có nhiều ý nghĩa để so sánh các hàm theo cách đó. Làm thế nào bạn có thể xác định xem hai hàm có bằng nhau không? –
Tương tự (có thể trùng lặp): http://stackoverflow.com/questions/5847072/comparing-stdfunction –
Câu trả lời ngắn: bạn nên tạo cấu trúc chứa khóa duy nhất và hàm 'std ::' và có vectơ là những cấu trúc đó. Nó không có ý nghĩa nhiều khi thực sự sử dụng một 'std :: function' như một khóa tìm kiếm. [Xem tại đây] (http://stackoverflow.com/questions/4430425/stdvector-of-stdfunction) –