Арифметика указателей с указателем на член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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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