我需要一个函子,它做一件非常简单的事情,基本上是这样的:
template<typename T>
struct Extract
{
T & operator()(T *t)
{
return *t;
}
};
我不想复制代码,而且我相信这样一个简单方便的代码应该已经存在于某个地方。我试过寻找它,但没有成功。
我想您想遍历某个容器并在其中使用指针做某事?甚至基于现有(如 std::plus & 等)构建一个更高阶的函数......
为此,boost库几乎没有解决方案:
两者都不仅能够使用原始指针工作,而且还包括对一些智能指针的支持......
首先,您的示例中存在语法错误,我认为您正试图重载函数调用运算符:
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);