我需要一个函子来做一件非常简单的事情,基本上是这样的:
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::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);