#include <iostream>
#include <list>

struct A{
int a, b, c;
long x;
};
struct B{
int a, b, c;
};
struct Hoge{
A* pa;
B* pb;
};

void func0( std::list<Hoge>& list_hoge ){
for( std::list<Hoge>::iterator it = list_hoge.begin(); it != list_hoge.end(); ++it ){
std::cout << it->pa->a << it->pa->b << it->pa->c << std::endl;
}
}
void func1( std::list<Hoge>& list_hoge ){
for( std::list<Hoge>::iterator it = list_hoge.begin(); it != list_hoge.end(); ++it ){
std::cout << it->pb->a << it->pb->b << it->pb->c << std::endl;
}
}
ストライドが微妙に違うA、Bがありまして、それをアクセス用のポインタとして持つHoge型があります。
Hoge自体はいじれるのですが、厄介なことにHogeにアクセス用ポインタを持たせるという点だけは変えられません。

func0とfunc1はそのストライドの差以外は全く同じ処理なので、どうにか一つにしたいと思っています。
しかし、template、union・・・・それなりに考えて見たのですが、上手く行きません。
何か良い手をご存じの方、いらっしゃいましたら是非にも。