Xin hãy tha thứ cho sự thiếu hiểu biết của tôi, tôi mới làm quen với C++.
Thông báo lỗi đầy đủ:
coog.cpp(74): lỗi C3867: 'Manager::start_foo': cú pháp không chuẩn, sử dụng '&' để tạo con trỏ tới thành viên
Tôi đang sử dụng dòng lệnh boost và tôi đang cố chuyển hàm thành viên đối tượng tới trình thông báo. Tôi đã thử nhiều thứ trong các bài đăng khác nhau ở đây và trên Google nhưng không gặp may. Thông báo lỗi nằm ở tiêu đề.
Hy vọng điều này mang lại cho bạn ý tưởng về những gì tôi đang cố gắng thực hiện:
Người quản lý người quản lý;
void coog::handle::start(std::vector& args, Manager& m)
{
po::options_description desc("Bắt đầu các tùy chọn được phép");
desc.add_options()
("foo,f", po::value<>>()
->multitoken()->notifier(m.start_foo), "start foo(s)")
("ví dụ", "hiển thị ví dụ về cách sử dụng từng lệnh")
("trợ giúp", "hiển thị thông báo này")
;
po::variables_map vm;
po::store(po::command_line_parser(args.size(), args.data()).
tùy chọn(desc).run(), vm);
po::notify(vm);
}
coog::handle::start(foos, manager);
Bất kỳ trợ giúp và giải thích sẽ được đánh giá rất cao.
người thông báo
Một chức năng có chữ ký này:
typed_value * notifier(function1< void, const T & > f);
Bạn không thể đặt phương thức lớp ở đây vì nó không phù hợp với chữ ký này, bạn có thể sử dụngtăng cường::liên kết
, lambda hoặc thứ gì khác, sẽ cho phép bạn xây dựng chức năng1
Với chữ ký được chỉ định ở trên từ phương thức lớp của bạn.
Ví dụ ràng buộc
:
trình thông báo(boost::bind(&Manager::start_foo, boost::ref(m), _1))
Ví dụ sử dụng lambda:
trình thông báo([&m](const T& v) { return m.start_foo(v); })
nó cũng phụ thuộc bắt đầu_foo
chữ ký, bạn có thể cần phải liên kết nhiều giá trị hơn.
Tôi là một lập trình viên xuất sắc, rất giỏi!