我有一個關於輕量級選項的問題,下面給出的定義,基於http://www.boost.org/doc/libs/1_40_0/libs/flyweight/test/test_basic.cppBoost.flyweight和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");
什麼樣的價值有boost::mpl::_1
和boost::mpl::_2
?什麼時候分配?
boost::mpl::_1
最可能是std::string
。 boost::mpl::_2
應該是size_t
?如果屬實,如何扣除? 我不明白key_type是如何選擇的。
我已閱讀http://www.boost.org/doc/libs/1_41_0/libs/flyweight/doc/tutorial/lambda_expressions.html但我這是我與Boost.MPL第一次接觸是不夠:)
所以,key_type由flyweight決定。但是,我怎樣才能確定類型並最終設置一個?密鑰是一個整數類型而非字符串非常重要。 – vlg789
如果要指定用於檢索對象的鍵,則需要使用'key_value'作爲'flyweight '的參數。你還需要告訴圖書館如何從一個值中檢索一個鍵,使用一個「鍵提取器」,一個函數返回與作爲參數給出的值相對應的鍵。有關示例,請參見[Boost.Flyweight教程](http://www.boost.org/doc/libs/1_47_0/libs/flyweight/doc/tutorial/key_value.html)。 –