有间接函数吗?

时间:2017-01-05 14:15:39

标签: c++ functor function-object indirection unary-function

我正在寻找一个一元函子,它将取消引用它的参数并返回结果。当然我可以写一个,它似乎已经存在了。

所以给出了代码:

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

我希望有一个我可以用而不是lambda的仿函数。这样的事情是存在的,还是我只需要使用lambda?

1 个答案:

答案 0 :(得分:9)

假设&#34;仿函数&#34; 是指&#34;功能对象&#34; &#34;可调用对象&# 34; there doesn't seem to be what you desire in the Standard Library

自己实施它是微不足道的:

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指定明确的尾随返回类型,则隐含的<{1}}将是始终为副本。如果auto返回引用并不重要,因为lambda返回一个副本(即operator*返回的引用然后被lambda&#39; {{1}复制声明)

operator*

wandbox example

相关问题