Если бы я занимался этой проблемой, то я, вероятно, запустил бы с аннотируемого графика. Каждый узел на графике представил бы каждое пересечение в городе, останавливается ли система общественного транспорта там - это помогает составлять потребность идти, и т.д. На пересечениях с транзитным сервисом, Вы аннотируете их маркировками остановки - маркировки, разрешающие Вам поиску сервисное расписание для остановки.
Затем у Вас есть выбор сделать. Вам нужен самый лучший маршрут или просто маршрут? Вы отображаете маршруты в режиме реального времени, или решения могут вычисляться и кэшироваться?
при необходимости в "оперативном" вычислении Вы, вероятно, захотите пойти с жадным своего рода алгоритмом, я думаю А*, алгоритм , вероятно, соответствовал бы этой проблемной области справедливо приятно.
при необходимости в оптимальных решениях необходимо посмотреть динамическое программирование решения графика... оптимальные решения, вероятно, возьмут намного дольше для вычисления, но только необходимо найти их однажды, затем они могут кэшироваться. Возможно, Ваш* алгоритм мог использовать предварительно вычисленные оптимальные пути для информирования его решений о "подобных" маршрутах.
Вы можете делать все, что хотите, но вам нужно отложить определение вложенных классов.
class Animal
{
class Bear;
class Giraffe;
};
class Animal::Bear : public Animal {};
class Animal::Giraffe : public Animal {};
Тип класса считается неполным до тех пор, пока не будет достигнут конец его определения. Вы не можете наследовать от неполного класса, поэтому вы не можете наследовать от включающего класса.
РЕДАКТИРОВАТЬ: Исправление
Как меня поправил Ричард Вольф: Возможно наследование от включающего класса, если вы задерживаете определение вложенных классов. Подробнее см. Его ответ.
Я не понимаю, чего вы здесь пытаетесь достичь, но вы можете получить это через пространства имен.
namespace creatures
{
class Animal
{
};
class Bear : public Animal
{
};
class Giraffe : public Animal
{
};
}
Это объявляет Медведя и Жирафа типами животных, но помещает все это в пространстве имен, если вы ищете, чтобы базовый класс не загрязнял глобальное пространство имен.
На самом деле не отвечает на вопрос, но я думаю, что вы злоупотребляете вложенным классом. Возможно, вам стоит взглянуть на пространства имен (кстати, ответ: «это невозможно, потому что Животное - неполный тип »).
Всегда стоит рассмотреть ATL-метод «перевернутого наследования». Каждый раз, когда мне нужно это сделать, у меня болит голова, но эффективность получаемого объектного кода непревзойдена. Где-то я вырезал статью Джима Бевериджа, которая была лучшим объяснением, которое я когда-либо видел, но сегодня его трудно найти, я просто вижу ссылку на него.
«25 марта 2004 г. ... Отличная статья Джима Бевериджа: ATL и перевернутое наследование ..»