从成员函数返回 boost iterator_range
returning boost iterator_range from a member function
我正在尝试创建一个 returns 数组范围如下的成员函数:
#include <boost/range/iterator_range.hpp>
class MyClass {
public:
boost::iterator_range< double* > range() const{
boost::iterator_range< double* > itr_range = boost::make_iterator_range< double* >(&container[0], &container[m_size]);
return itr_range;
}
private:
double container[4] {0.0, 1.0, 2.0, 3.0};
size_t m_size = 4;
};
int main() {
MyClass obj;
return 0;
}
但它给出了以下错误:
no matching function for call to 'make_iterator_range(const double*, const double*)' main.cpp line 6
'double*' is not a class, struct, or union type range_test line 37, external location: /usr/include/boost/range/const_iterator.hpp
'double*' is not a class, struct, or union type range_test line 37, external location: /usr/include/boost/range/mutable_iterator.hpp
required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<C>::type> boost::make_iterator_range(Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]' range_test line 616, external location: /usr/include/boost/range/iterator_range.hpp
required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<const T>::type> boost::make_iterator_range(const Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]' range_test line 626, external location: /usr/include/boost/range/iterator_range.hpp
这可能是什么问题?预先感谢您的帮助?
constness 是个问题。
你的range
方法是const
。
const
方法中 &container[0]
的类型是什么?是const double*
。它不符合
boost::make_iterator_range< double* >
^^^^^^^^
所以定义range
成员函数为非常量或者使用boost::make_iterator_range< const double*>
.
当我像下面这样更改它时它起作用了:
boost::iterator_range<const double*> range() const{
return boost::make_iterator_range(&container[0], &container[m_size]);
}
我正在尝试创建一个 returns 数组范围如下的成员函数:
#include <boost/range/iterator_range.hpp>
class MyClass {
public:
boost::iterator_range< double* > range() const{
boost::iterator_range< double* > itr_range = boost::make_iterator_range< double* >(&container[0], &container[m_size]);
return itr_range;
}
private:
double container[4] {0.0, 1.0, 2.0, 3.0};
size_t m_size = 4;
};
int main() {
MyClass obj;
return 0;
}
但它给出了以下错误:
no matching function for call to 'make_iterator_range(const double*, const double*)' main.cpp line 6
'double*' is not a class, struct, or union type range_test line 37, external location: /usr/include/boost/range/const_iterator.hpp
'double*' is not a class, struct, or union type range_test line 37, external location: /usr/include/boost/range/mutable_iterator.hpp
required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<C>::type> boost::make_iterator_range(Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]' range_test line 616, external location: /usr/include/boost/range/iterator_range.hpp
required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<const T>::type> boost::make_iterator_range(const Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]' range_test line 626, external location: /usr/include/boost/range/iterator_range.hpp
这可能是什么问题?预先感谢您的帮助?
constness 是个问题。
你的range
方法是const
。
const
方法中 &container[0]
的类型是什么?是const double*
。它不符合
boost::make_iterator_range< double* >
^^^^^^^^
所以定义range
成员函数为非常量或者使用boost::make_iterator_range< const double*>
.
当我像下面这样更改它时它起作用了:
boost::iterator_range<const double*> range() const{
return boost::make_iterator_range(&container[0], &container[m_size]);
}