Арифметика указателей с указателем на членC++

Программы на C++. Форум разработчиков
Anonymous
Арифметика указателей с указателем на член

Сообщение Anonymous »

У меня есть указатель на член, например

Код: Выделить всё

#include 

struct Foo {
uint64_t x;
};

void test(Foo& f, uint64_t Foo::* p) {
(f.*p) = 5;
}
Это прекрасно работает. Однако предположим, что я действительно хочу создать указатель на вторую половину x (мы предполагаем прямой порядок байтов):

Код: Выделить всё

#include 

struct Foo {
uint64_t x;
};

void test32(Foo& f, uint32_t Foo::* p) {
(f.*p) = 5;
}

void test(Foo& f, uint64_t Foo::* p) {
test32(f, reinterpret_cast(p) + 1);
}
Это не удается из-за ошибки:

Код: Выделить всё

error: invalid operands of types 'uint32_t Foo::*' {aka 'unsigned int Foo::*'} and 'int' to binary 'operator+'
Почему это так и как мне выполнить эту арифметику с указателями?
(И да, я знаю, что это кажется плохой идеей. Пожалуйста, нет " «ты не должен этого делать» (комментарии).)

Подробнее здесь: https://stackoverflow.com/questions/784 ... -to-member

Вернуться в «C++»