Здравствуйте, Stas Chistyakov, Вы писали:
SC>Создать на каждую переменную по функтору — элементарно, собственно весь вопрос был про более менее универсальный, т.е. переменная член должна была бы фиксиковаться в конструкторе функтора
#include <cassert>
template <typename Class, typename FieldClass>
class Field {
public:
typedef FieldClass Class::*FieldOffset;
private:
FieldOffset fieldOffset;
public:
FieldClass &operator () (Class &value) { return value.*fieldOffset; }
Field(FieldOffset fieldOffset): fieldOffset(fieldOffset) {}
};
struct Test {
int a;
char *b;
};
void main() {
Field<Test, int> aField(&Test::a);
Field<Test, char *> bField(&Test::b);
Test test;
test.a = 1;
char *temp = "bebe";
test.b = temp;
assert(aField(test) == 1);
assert(bField(test) == temp);
}
Или я чего-то не понял?