Với lớp này:Tôi có thể viết functors bằng cách sử dụng cấu trúc lồng nhau riêng không?
class C
{
private:
struct Foo
{
int key1, key2, value;
};
std::vector<Foo> fooList;
};
Ý tưởng ở đây là fooList
có thể được lập chỉ mục bởi một trong hai key1
hay key2
của struct Foo. Tôi đang cố gắng viết các thư viện để chuyển đến std::find_if
để tôi có thể tra cứu các mục theo số fooList
theo từng khóa. Nhưng tôi không thể làm cho chúng biên dịch vì Foo
là riêng tư trong lớp (nó không phải là một phần của giao diện của C). Có cách nào để thực hiện điều này mà không cần phơi bày Foo
với phần còn lại của thế giới không?
Dưới đây là một ví dụ về mã đó sẽ không biên dịch vì Foo
là tin trong lớp học của tôi:
struct MatchKey1 : public std::unary_function<Foo, bool>
{
int key;
MatchKey1(int k) : key(k) {}
bool operator()(const Foo& elem) const
{
return key == elem.key1;
}
};
+1, tôi quên về việc đơn giản chuyển tiếp khai báo các functors thành các cấu trúc lồng nhau. Tôi đã sửa lỗi đánh máy (copy-and-paste-o?) Cho bạn. –
@Kristo: copy-and-paste-o? bạn đặt cược-o! ;) –