Это должно быть очень просто.
Макет:
class handler {
public:
handler(Connection *conn) { connection = conn; }
virtual void handle() = 0;
};
class http_status : public handler {
public:
http_status(Connection *conn) : handler(conn) { }
void handle();
};
class http_photoserver : public handler {
public:
http_photoserver(Connection *conn) : handler(conn) { }
void handle();
};
Код:
void pick_and_handle() {
if (connection->http_header.uri_str != "/") {
http_photoserver handler(connection);
} else {
http_status handler(connection);
}
handler.handle();
}
Это дает ошибку:
../handler.cpp:51:10: error: expected unqualified-id before ‘.’ token
Я предполагаю, потому что компилятор не знает, что такое обработчик, потому что объект создается внутри оператора if.Мне нужно выбрать обработчик на основе условия, как мне это сделать?
Очевидно, этот код работает:
if (connection->http_header.uri_str != "/") {
http_photoserver handler(connection);
handler.handle();
} else {
http_status handler(connection);
handler.handle();
}
Но выглядит не очень сексуально!Это действительно единственный способ в C ++?