У меня есть структура, которая содержит другие структуры, а также примитивные типы данных. Я хотел бы иметь доступ к каждому члену, включая членов структур, содержащихся в основной структуре, с помощью функции шаблона.Функция шаблона для доступа к элементам структуры
Например:
struct B {
int y;
int z;
};
struct A {
int x;
B b;
};
template <typename TMember>
bool doSomething(A *a, TMember member) {
a->*member = 5; // some code accessing member
}
// Then access it with:
doSomething(&myA, &A::x);
// and likewise
doSomething(&myA, &A::b.y);
Однако второй не будет компилировать и бросить «объект отсутствует в ссылке на» ошибки. Я предполагаю, потому что у A нет члена b.y?
Есть ли какой-либо способ получить функциональность, которую я хочу, или будет кодировать другую функцию?
(Обратите внимание, это всего лишь пример, и код, который у меня есть содержит большую структуру и сэкономит мне больше времени, чем просто писать вторую функцию.)
Спасибо!
Вы уверены, что первые компилирует? Конечно, вычет шаблона будет означать, что это int, но он все еще пытается получить доступ к нестационарному члену. – Aesthete
Я не думаю, что вы сможете делать то, что хотите. Вам нужно будет написать еще одну функцию. Не зная, что вы делаете, или видите свою «структуру», моя реакция на это заключается в том, что дизайн неправильный и должен быть переосмыслен. – pstrjds
«Я хотел бы иметь доступ к каждому члену, включая членов структур, содержащихся в основной структуре». Это было бы нарушением Закона Деметры. Не. –