我有一個多態接口在C++接口使用Boost.Range
struct Interface {
Interface(SomeType& other)
: range([=](){ return other.my_range(); }), /*...*/ {}
Interface(SomeOtherType& other)
: range([=](){ return other.some_range(); }), /*...*/ {}
const std::function<Range(void)> range;
/// ...
};
在兩個範圍中的元素具有相同的類型(例如int
)的,而是由my_range()
和由some_range()
返回的類型是不同的,例如一個可以是filtered counting range
,另一個可以是transformed filtered counting range
。對於接口,我需要一個Range
類型。
我試過使用boost::any_range
但性能明顯更差。我想避免必須將範圍元素複製到vector
並返回該向量。
any_range
有沒有其他的選擇和複製?
感謝您的回答,在界面包裹算法是一種可能性,我沒有這樣的考慮。可以肯定的是,在「for_each」算法排序之後,binary_search,然後......接口中成員函數的爆炸式增長。也許這不會發生在我的應用程序中,所以你的建議可能是最好的解決方案(至少與any_range結合)。我會睡覺,非常感謝這個想法! – gnzlbg