Функтор в STL / Boost, который извлекает значение из указателя

Мне нужен функтор, который делает очень простую вещь, в основном это:

template<typename T>
struct Extract
{
T & operator()(T *t)
{
return *t;
}
};

Я не хочу копировать код, и я считаю, что такой простой и удобный кусок кода уже должен где-то существовать. Я пытался найти его, но безуспешно.

0

Решение

Я полагаю, вы хотите перебрать какой-нибудь контейнер и сделать что-нибудь с указателями в нем? Или даже построить функцию более высокого порядка на основе существующих (например, std :: plus & так далее)…

Для этого у библиотеки boost есть несколько решений:

оба способны работать не только с указателями raw, но и с поддержкой некоторых умных …

2

Другие решения

Во-первых, в вашем примере есть синтаксическая ошибка, я думаю, вы пытаетесь перегрузить оператор вызова функции как таковой:

template<typename T>
struct Extract
{
T& operator()(T *t)
{
return *t;
}
};

Далее кажется, что это преобразование указателя на ссылку. Вы можете сделать это используя std::ref а также std::cref в стандартной библиотеке. Они создают std::reference_wrapper от значения, так что вы бы предпочли аргумент указателя перед отправкой std::ref,

Как ваш используется:

Extract<int> ex;
int n = 1;
int* n_ptr = &n;
int& n2 = ex(n_ptr);

Как std::ref будет использоваться:

int n = 1;
int* n_ptr = &n;
int& n2 = std::ref(*n_ptr);
1

По вопросам рекламы [email protected]