0

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

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

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

4

2 回答 2

2

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

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

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

于 2012-12-05T15:41:12.603 回答
1

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

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);
于 2012-12-05T15:36:23.403 回答