我正在寻找一个一元函子,它将取消引用它的参数并返回结果。我当然可以写一个,只是看起来有些东西应该已经存在了。
所以给出代码:
const auto vals = { 0, 1, 2, 3 };
vector<const int*> test(size(vals), nullptr);
iota(begin(test), end(test), data(vals));
transform(cbegin(test), cend(test), ostream_iterator<int>(cout, " "), [](const auto& i){ return *i; });
Live Example http://ideone.com/vhImnA
我希望有一个函子可以用来代替 lambda。这样的事情存在吗,还是我只需要使用 lambda ?
假设通过“函子”你的意思是“函数对象” or “可调用对象”, 标准库中似乎没有您想要的东西 http://en.cppreference.com/w/cpp/utility/functional.
自己实现它很简单:
struct deferencer
{
template <typename T>
decltype(auto) operator()(T&& x) const
noexcept(noexcept(*x))
{
return *x;
}
};
请注意,您的 lambda 没有执行您期望的操作,因为它的隐式返回类型是-> auto
,这会生成一个副本。一种可能的正确 lambda 是:
[](const auto& i) -> decltype(auto) { return *i; }
如果您没有明确指定尾随返回类型对于 lambda,隐含的将是auto
这是总是一个副本。没关系,如果operator*
返回一个引用,因为 lambda 返回一个副本(即返回的引用operator*
然后被 lambda 复制return
陈述).
struct A
{
A() = default;
A(const A&) { puts("copy ctor\n"); }
};
int main()
{
[]{ return *(new A); }(); // prints "copy ctor"
}
魔杖盒示例 http://melpon.org/wandbox/permlink/lHBJMMjNcKWR4Q66
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)