gpt4 book ai didi

c++ - 是否有通用的方法来迭代一组对象中的特定变量?

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:51 25 4
gpt4 key购买 nike

假设我有一个链表,里面有一堆不同的数据。

class Node
{
public:
Node* next;
AAA dataA;
BBB dataB;
CCC dataC;
};

有没有一种方法可以创建一个迭代器来迭代我指定的任何变量(而不是为每个变量创建三个单独的迭代器)。我知道迭代器可以使用模板来迭代 AAA、BBB 或 CCC 类型,但我不知道如何指定要返回的变量。

最佳答案

我发现最好的方法是使用 boost bindboost transform_iterator

首先,您需要一个 Node 对象集合和一个将遍历该集合的迭代器。在我的示例中,为简洁起见,我将使用 std::list。

#include <boost/bind.hpp>
#include <boost/iterator/transform_iterator.hpp>
using boost;

struct FunctionAAA
{
void operator() (const AAA& x)
{}
};

struct FunctionBBB
{
void operator() (const BBB& x)
{}
};

typedef std::list<Node> NodeList;
NodeList collection;
std::foreach (
make_transform_iterator (collection->begin(), bind (&Node::dataA, _1)),
make_transform_iterator (collection->end(), bind (&Node::dataA, _1)),
FunctionAAA());

std::foreach (
make_transform_iterator (collection->begin(), bind (&Node::dataB, _1)),
make_transform_iterator (collection->end(), bind (&Node::dataB, _1)),
FunctionBBB());

关于c++ - 是否有通用的方法来迭代一组对象中的特定变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com