STL/Boost 中的函子,从指针中提取值



我需要一个函子来做一件非常简单的事情,基本上是这样的:

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

我不想复制代码,我相信这样一段简单方便的代码应该已经存在于某个地方。我试过寻找它,但没有成功。

我想

你想遍历某个容器并在其中使用指针进行 smth?甚至基于现有构建一个高阶函数(如std::p lus等)...

为此,Boost 库有几种解决方案:

  • indirect_iterator 来自 boost::迭代器
  • 来自升压::范围的间接适配器

两者都能够不仅使用原始指针工作,而且还包括对一些智能指针的支持......

首先,您的示例中存在语法错误,我认为您正在尝试重载函数调用运算符:

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

接下来,这似乎是将指针转换为引用。您可以使用标准库中的std::refstd::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);

最新更新