再加上<string>预定义的仿函数在C ++中进行串联?

时间:2019-02-28 04:03:37

标签: c++ functor

看起来像plus()的预定义函子应该适用于字符串,因为它转而使用operator +。但是,这无法编译。

   string one="one", two="two";
   string result=std::plus<string>(one,two);

为什么?

2 个答案:

答案 0 :(得分:1)

std::plus是一个功能对象,必须以与使用其他功能对象相同的方式使用。

最小示例:

#include <iostream>
#include <string>
#include <functional>

int main()
{
    std::string one="one";
    std::string two="two";
    std::string result=std::plus<std::string>()("one","two"); //a temp function object created.
    std::cout << result;

}

请参见demo here

答案 1 :(得分:1)

std::plus是一个函子,这意味着您需要创建一个对象:

auto adder = std::plus<>{};
auto result = adder(one, two); // result is onetwo

由于这个原因,您永远不会像现在这样使用它:您总是只写one + two

但这确实意味着您可以像使用std::greater之类的方式使用此方法:将其作为函子传递给适用于某些容器的函子,而无需编写自己的lambda到一起添加东西。

有关函子的更多信息,请参见What are C++ functors and their uses?