C как использовать std::function с перегруженными операторами разных возвращаемых типов

#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");
 

ДЕМОНСТРАЦИЯ