如何获取成员函数返回值的迭代器
How to get an iterator over the return values of member function?
class A
{
public:
const B& GetB() const;
};
vector<A> manyA;
template<typename ConstBIter>
void foo(ConstBIter beginB, ConstBIter endB);
在 A 中存储的 B 上获取迭代器的最优雅的方法是什么.可以获取指针,将它们存储在数组中并使用 boost::indirect_iterator。但肯定有更好的方法吗?
编写自己的迭代器类。在C++中,您不仅限于使用标准C++库中定义的迭代器类。
如果您的类满足 C++ 标准中定义的迭代器的要求,则可以在可以使用满足相同要求的任何其他迭代器的任何位置与 C++ 库一起使用。
事实上,许多大型软件库都声明和定义自己的迭代器,用于自己的特定目的。
有解决方案...
typedef boost::transform_iterator<boost::function<B&(A&)>, vector<A>::iterator> BIter;
BIter beginBIter(manyA.begin(), boost::mem_fn(&Layer::GetB));
BIter endBIter(manyA.end(), boost::mem_fn(&Layer::GetB));
相关文章:
- 程序不向函数返回值
- 如何将不可移动和不可复制的函数返回值获取到数组中
- 存储函数返回值或立即使用c++
- 如何删除新分配的字符,这也是函数返回值?
- 不从函数返回值会导致段错误
- lambda 函数返回值的有效性
- 如何获取有关 Visual Studio 代码分析中未经检查的函数返回值的警告
- 存储指向函数返回值的指针
- 在 OOP 中,调用函数返回值还是直接调用值更快?
- 函数返回值的自动类型扣除
- 为循环中多次调用的函数返回值预分配内存的正确方法是什么
- 函数返回值的位运算符提升
- 从捕获 constexpr 函数返回值的变量中删除 constexpr 会删除编译时计算
- C++ ReSharper - 生成函数返回值/参数类型的变量
- std::clamp - 检测函数返回值是否绑定到 const T&
- C 递归函数返回值
- 是否可以在C 中使回调函数返回值
- C++标准是否保证函数返回值具有常量地址?
- 将函数返回值传递给引用参数会导致 GCC 中的编译错误
- 函数返回值错误