2013-07-06 99 views
1

我想從我的課程中返回一個像boost::iterator_range這樣的只讀適配器,但是對於std::map和對operator[](即不是boost::iterator_range<std::pair<key_type, value_type>>)的支持,是否存在類似的東西?Readonly std :: map?

例如

class processor 
{ 
public: 

    // boost::map_view is made up. 
    // The data member could be std::map boost::multimap etc... 

    virtual boost::map_view<std::string, boost::signals2::signal<int>> outputs() = 0; 

}; 

回答

4

您可以使用常量引用。

+0

我把它作爲評論,但我刪除它,鑑於上下文,我認爲OP似乎知道他們在做什麼,他們會想到這一點,並排除了,儘管他們沒有做出它完全明白爲什麼。我想有時你不會想到這個非常簡單的解決方案。 – BoBTFish

+1

好點。我沒有給出整個背景。該實現不會總是使用std :: map作爲數據容器。 – ronag

+0

Thanks.I也相信只是給出想法,讓他們想出解決方案。 –

1

你可以製作一個簡單的類來包裝boost :: iterator_range,並將const作爲一個成員引用到你的地圖。您的operator []實現應該通過調用第一個和最後一個range元素上的映射比較對象(請注意,它不足以滿足multi_map)並且僅調用底層映射[]來檢查傳遞的鍵是否在範圍內。