Tôi có bản đồ lưu trữ cấu trúc đơn giản với khóa. Cấu trúc có hai hàm thành viên, một là hàm khác không phải. Tôi đã quản lý gọi hàm const bằng cách sử dụng std :: for_each mà không có bất kỳ vấn đề nào, nhưng tôi có một số vấn đề gọi hàm không const.Boost.Bìm cách truy cập std :: các yếu tố bản đồ trong tiêu chuẩn :: for_each
struct MyStruct {
void someConstFunction() const;
void someFunction();
};
typedef std::map<int, MyStruct> MyMap;
MyMap theMap;
//call the const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someConstFunction, boost::bind(&MyMap::value_type::second, _1)));
//call the non-const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someFunction, boost::bind(&MyMap::value_type::second, _1)));
Các cuộc gọi đến hàm thành viên const hoạt động tốt, nhưng có vẻ như đẩy mạnh nội hy vọng một MyStruct const nơi nào đó, và do đó không thành công với các lỗi biên dịch sau trong MSVC7.1.
tăng \ bind \ mem_fn_template.hpp (151): lỗi C2440: 'tranh luận': không thể chuyển đổi từ 'MyStruct const * __ w64' thành 'MyStruct * const'
Tôi đánh giá cao bất kỳ giúp làm thế nào để thiết lập các thông số mẫu một cách chính xác, do đó, ràng buộc không nhận ra các thông số một cách chính xác và để tôi gọi hàm không const.
cảm ơn, Carl
Nếu bạn sao lưu và cho chúng tôi biết những gì bạn đang thực sự muốn thực hiện ở đây thì sao?Sử dụng for_each với một bản đồ với boost :: bind * có thể * là hợp lý, nhưng rất có thể là một cách tiếp cận chung khác sẽ làm việc tốt hơn (nhiều lần loại câu hỏi này phát sinh, đó là vì 'std :: for_each' là một lựa chọn tồi cho tình hình, và một cái gì đó như 'std :: copy' hoặc std :: accumulate' sẽ làm công việc đơn giản hơn nhiều). –
Các MyStruct được sử dụng trong một loại hệ thống hạt, nơi MyStruct là hạt. Hàm const là một hàm draw(), hàm non-const tính toán vị trí mới. Khóa trong bản đồ là ngày tạo. Dù sao, tại thời điểm tôi đăng câu hỏi đó là nhiều hơn về cách để làm cho công việc đó hơn nếu đây là một thiết kế tốt trong đầu. – Carl