плюс <string>предопределенный функтор для конкатенации в c ++? - PullRequest
0 голосов
/ 28 февраля 2019

Похоже, что предопределенный функтор plus () должен работать для строк, поскольку он сводится к использованию оператора +.Однако это не компилируется.

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

Почему?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

std::plus - это функтор, что означает, что вам нужно создать объект из него:

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

По этой причине вы никогда не будете использовать его так, как вы: вы всегда будете простонапишите one + two.

Но это означает, что вы можете использовать это так же, как и std::greater и т.п.: передавая его как функтор, который будет применяться к некоторому контейнеру, а не нуждатьсянаписать свою собственную лямбду, чтобы сложить все вместе.

См. Что такое функторы C ++ и их использование? для получения дополнительной информации о функторах.

0 голосов
/ 28 февраля 2019

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;

}

Смотрите демо здесь .

...