箭头运算符和 boost 多数组迭代器
arrow operator and boost multiarray iterator
boost 多数组迭代器是否缺少箭头运算符?我期望这会起作用是不是错了?
#include <vector>
#include <boost/multi_array.hpp>
struct foo {
int n;
};
int main()
{
{
std::vector<foo> a;
auto it = a.begin();
int test = it->n; // this does compile
}
{
boost::multi_array<foo, 1> a;
auto it = a.begin();
int test = it->n; // this does not compile
}
return 0;
}
似乎是一个错误。 array_iterator::operator->
returns一个:
// reference here is foo&
operator_arrow_proxy<reference> operator->() const;
其中:
template <class T>
struct operator_arrow_proxy
{
operator_arrow_proxy(T const& px) : value_(px) {}
T* operator->() const { return &value_; }
// This function is needed for MWCW and BCC, which won't call operator->
// again automatically per 13.3.1.2 para 8
operator T*() const { return &value_; }
mutable T value_;
};
但是 T*
这里会是 foo&*
并且您不能获取指向引用的指针。此外,您不能有 mutable
参考成员。所以整个 class 模板在这个用例中被破坏了。
boost 多数组迭代器是否缺少箭头运算符?我期望这会起作用是不是错了?
#include <vector>
#include <boost/multi_array.hpp>
struct foo {
int n;
};
int main()
{
{
std::vector<foo> a;
auto it = a.begin();
int test = it->n; // this does compile
}
{
boost::multi_array<foo, 1> a;
auto it = a.begin();
int test = it->n; // this does not compile
}
return 0;
}
似乎是一个错误。 array_iterator::operator->
returns一个:
// reference here is foo&
operator_arrow_proxy<reference> operator->() const;
其中:
template <class T>
struct operator_arrow_proxy
{
operator_arrow_proxy(T const& px) : value_(px) {}
T* operator->() const { return &value_; }
// This function is needed for MWCW and BCC, which won't call operator->
// again automatically per 13.3.1.2 para 8
operator T*() const { return &value_; }
mutable T value_;
};
但是 T*
这里会是 foo&*
并且您不能获取指向引用的指针。此外,您不能有 mutable
参考成员。所以整个 class 模板在这个用例中被破坏了。