Тип указателя на член класса

177
26 апреля 2019, 11:50

Какой тип имеет указатель на член класса? Другими словами, что нужно подставить здесь, чтобы работало? Очевидное int* не работает.

struct X {
    int x = 0;
};
template<class T, T value>
auto foo() { return *value; }
int main() {
    std::cout << foo</* какой тип? */, &X::x>();
}
Answer 1

Указатель на поле класса должен иметь тип int X::*, а чтобы приведенный код работал надо еще создать экземпляр класса X:

#include <iostream>
struct X
{
    int x = 0;
};
template<auto x_pointer, typename x_Class>
auto foo(x_Class & obj)
{
    return obj.*x_pointer;
}
// или так
template<int X::* x_pointer>
auto foo(X & obj)
{
    return obj.*x_pointer;
}
int main()
{
    X x{};
    std::cout << foo<&X::x>(x);
}

online compiler

READ ALSO
lower_bound и iterator

lower_bound и iterator

не знаю как заставить это работатьперепробовал уже все варианты (auto, iterator, const_iterator)

157
Поиск библиотеки для распаковки данных

Поиск библиотеки для распаковки данных

Есть задача распаковать данные, запакованные с помощью zlib и это делается всего одной функцией из этой библиотекиНо если у меня из всей библиотеки...

158
Вывод графика функции WinApi

Вывод графика функции WinApi

Есть цикл рисующий график функции f(x) = x * x * x - 10 * x*x - 3 * x + 59 с помощью LineToНо при отображении получаются ломанные линии,как это можно исправить?

199