Здравствуйте, ssi, Вы писали:
ssi>_members_map[ptrdiff_t(&a) - ptrdiff_t(this)] = "a";
Я так понимаю, подразумевалось ptrdiff_t(&a — this)? В любом случае UB это. Хотя большинство компиляторов, по идее, должны такое спокойно проглотить, нельзя на это закладываться. Еще есть offsetof, но и он только для POD.
Только вопрос: для чего это? Можно пример кода, который упрощается с помощью данного подхода? Странный он какой-то. И почему get_member_str возвращает NULL, если ему подсунуть указатель не на член данного объекта?
Наверное, если хорошо постараться, то можно добиться вот такого использования:
std::cout << Foo::template memberStr<&Foo::a>() << std::endl;
Вроде бы так красивее всего.