У меня есть виртуальная функция, которая называется handlePathChange() в моем классе Controller.
Он проверяет текущий URL-адрес и отправляет ему правильный вид.
Вот код, который я до сих пор:Как сообщить контроллеру, что посмотреть?
void Controller::handlePathChange()
{
if (app->internalPathMatches(basePath))
{
string path = app->internalPathNextPart(basePath);
if (path.empty()) // If it's empty it is known that the index of the controller should show up
index();
// else if (path == ??) each controller has it's own routes
// call_some_unknown_function();
}
}
Как я могу обобщить это?
Я думал о два варианта:
- Вызов чисто виртуальная функция называется отправка(), которая будет соответствовать правильный путь к правой функции в производном классе. Это решение нарушает DRY, поскольку в основном вы будете писать один и тот же код снова и снова.
- Создайте хэш-карты std :: function, но если часть URL-адреса является параметром, то представление не будет найдено. Так что этот вариант недостаточно хорош.
Любые идеи?
Здесь проблема, потому что C++ не хватает отражения. Я не могу вызвать index() из строки «index». Более того, я не могу иметь гетерогенный контейнер, который содержит объекты функций, которые не имеют одинаковой длины параметров? –
А, я вижу. Не знаете, как обращаться с динамическим вызовом, отличным от того, что вы предлагаете в # 1 и # 2. Однако с параметрами вы не могли бы принять одинаковое количество параметров, а затем просто предоставлять значения по умолчанию? Например, - разобрать URL-адрес - определить предполагаемое действие как первую/среднюю часть URL-адреса - назначить дополнительные параметры, если они указаны, в противном случае отправить значения по умолчанию для значений параметров? Похоже, что с помощью этого подхода может работать ваш вариант №2? –
Я начал писать. На данный момент я использую хэш-карту параметров (key: string, value: string), что я имею в виду, если они не соответствуют контроллеру или действию, а затем добавляются к параметрам. Теперь я выполняю настройки по умолчанию. Как бы вы реализовали setView, как в ASP.Net MVC? –