Ваш вопрос на самом деле является лишь частичным вопросом.
Вы могли бы создать адаптер итератора, который бы действовал так, как будто он перебирал коллекцию AAA
, но фактически перебирал коллекцию Node
s. Однако это может быть не лучшим решением вашей основной проблемы.
Я предполагаю, что у вас есть какое-то действие, которое вы хотите выполнить с каждым aaa
участником. Предположим, что это был такой функтор, как этот.
struct DoAAAAction
{
void operator()(AAA& a);
};
Вероятно, легче адаптировать действие для действия на Node
.
template<class Action>
class DataA_ActionAdapter
{
public:
DataA_ActionAdapter( Action aa ) : a( aa ) {}
void operator()(Node& n) { a(n.dataAAA); }
private:
Action a;
};
Это позволяет использовать стандартные алгоритмы на Node
итераторах.
template<class NodeIterator, class AAAAction>
void TestAAA(NodeIterator first, NodeIterator last, AAAAction aaaa)
{
std::for_each( first, last, DataA_ActionAdapter<AAAAction>( aaaa ) );
}