【问题标题】:Functor in STL/Boost which extracts value from pointerSTL / Boost中的函子从指针中提取值
【发布时间】:2012-12-05 15:13:58
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不简单地使用'*',而不是Extract
  • 你能展示一些用例吗?
  • 我认为用例与std::plus 和类似的仿函数相同。
  • @Juraj:你能用一两句话启发我们吗?
  • @Zane: transform(input.begin(), input.end(), output.begin(), Extract());

标签: c++ pointers boost stl functor


【解决方案1】:

我想你想遍历某个容器并在其中使用指针做某事?甚至基于现有的(如 std::plus & 等)构建一个更高阶的函数......

为此,boost 库有几个解决方案:

两者不仅可以使用原始指针,还可以支持一些智能指针...

【讨论】:

    【解决方案2】:

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

    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);
    

    【讨论】:

    • std::ref 不是 OP 想要的。他想要一个函子,它返回一个给定指针的引用。
    • @aleguna 函数不是函子吗?
    • @BretKuhns,是的,但 std::ref 没有做 OP 想要的
    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多