#c #operator-overloading
#c #оператор-перегрузка
Вопрос:
Я пытаюсь использовать стандарт std::function
с пользовательскими перегруженными операторами. Однако применение std::logical_and
к моему Test
классу с string
параметром в этой ситуации не работает.
class Test {
public:
std::string value;
Test(std::string cvalue) : value(cvalue) {}
std::string operatoramp;amp; (const std::stringamp; rhs) const {
if (rhs == value) {
return "true";
}
return "false";
}
};
int main() {
Test test("hey");
std::string out = std::logical_and<std::string>()(test, "hey");
std::cout << out << std::endl;
return 0;
}
Каков правильный способ достижения этого? Мой ожидаемый результат "true"
Комментарии:
1. «используйте стандарт
std::function
» . На самом деле вы им не пользуетесьstd::function<Sig>
.
Ответ №1:
Вам нужно использовать std::logical_and<>
, чтобы разрешить вычет как для аргументов, так и для возвращаемого типа:
std::string out = std::logical_and<>()(test, "hey");