ラップするしかないのだろうか。
#include <iostream> #include <algorithm> #include <boost/range.hpp> template<class T> class Array { size_t m_size; T* m_ptr; public: Array(T* ptr, size_t n) : m_ptr(ptr), m_size(n) {} typedef T* iterator; typedef T const* const_iterator; iterator begin() { return m_ptr; } iterator end() { return m_ptr + m_size; } const_iterator begin() const { return m_ptr; } const_iterator end() const { return m_ptr + m_size; } }; template<class Range, class T> bool find(Range const& r, T const& target) { return std::find(boost::begin(r), boost::end(r), target) == boost::end(r); } int main() { int tmp[] = {1, 2, 3, 4, 5}; int* arr = tmp; std::cout << find(tmp, 5) << std::endl; std::cout << find(Array<int>(arr, sizeof(tmp)/sizeof(tmp[0])), 5) << std::endl; }
追記
ちゃんと(?)boost::make_iterator_rangeというユーティリティ関数(と、上の Array よりちゃんとした iterator_range クラス)が用意されていたようです。
std::cout << find(boost::make_iterator_range(arr, arr + sizeof(tmp)/sizeof(tmp[0])), 5) << std::endl;
でいけました。id:uskzさん、いつもありがとうございます。
なんだか教えて君になってきたな……。