Tôi có một câu hỏi liên quan đến lựa chọn hạng ruồi, đưa ra định nghĩa dưới đây, dựa trên http://www.boost.org/doc/libs/1_40_0/libs/flyweight/test/test_basic.cppBoost.flyweight và Boost.MPL
typedef boost::flyweights::flyweight<
std::string,
boost::flyweights::tag<int>,
boost::flyweights::static_holder_class<boost::mpl::_1>,
boost::flyweights::hashed_factory_class<
boost::mpl::_1,
boost::mpl::_2,
boost::hash<boost::mpl::_2>,
std::equal_to<boost::mpl::_2>,
std::allocator<boost::mpl::_1>
>,
boost::flyweights::simple_locking,
boost::flyweights::refcounted
> StringFlyweight;
StringFlyweight test1("Hello World");
những gì giá trị có boost::mpl::_1
và boost::mpl::_2
? Khi được sắp xếp?
boost::mpl::_1
nhiều khả năng là std::string
. boost::mpl::_2
phải là size_t
? Nếu đúng, làm thế nào được khấu trừ? Tôi không hiểu cách chọn key_type.
Tôi đã đọc http://www.boost.org/doc/libs/1_41_0/libs/flyweight/doc/tutorial/lambda_expressions.html nhưng tôi nó là tiếp xúc đầu tiên của tôi với Boost.MPL và không đủ :)
vì vậy, key_type được xác định bằng trọng lượng. Nhưng làm thế nào tôi có thể xác định loại và cuối cùng đặt một? Điều quan trọng là chìa khóa là một loại không thể thiếu, không phải là một chuỗi. – vlg789
Nếu bạn muốn chỉ định khóa được sử dụng để truy xuất đối tượng, bạn cần sử dụng 'key_value' làm đối số cho 'flyweight '. Bạn cũng cần nói cho thư viện biết cách lấy một khóa từ một giá trị, sử dụng một "trình trích xuất khóa", một hàm trả về khóa tương ứng với giá trị được đưa ra làm đối số. Xem [hướng dẫn Boost.Flyweight] (http://www.boost.org/doc/libs/1_47_0/libs/flyweight/doc/tutorial/key_value.html) để biết ví dụ. –