Есть следующий код:
struct A {
int i;
char c;
template<typename Caller>
void en(Caller & caller)
{
caller.f(i); // (1)
caller.f(c); // (2)
}
};
struct SomeCaller {
SomeCaller(A & a_) : a(a_) {}
template<typename T>
void f(/* ??? */ & val)
{
// Здесь нужно получить доступ на соответственный member из объекта a
}
A & a;
};
int main()
{
A a1, a2;
// ...
a1.en(SomeCaller(a2)); // (3)
return 0;
}
При вызове (3), в функции f нужно как-то получить доступ к соответственным (1-2) полям объекта a2. То есть при вызове (1), val в f должно ссылаться на a2.i, при вызове (2) — на a2.c . Можно ли как-нибудь это сделать, не меняя en в структуре A?