Вложенный класс C++ может наследовать свой класс включения?

Если бы я занимался этой проблемой, то я, вероятно, запустил бы с аннотируемого графика. Каждый узел на графике представил бы каждое пересечение в городе, останавливается ли система общественного транспорта там - это помогает составлять потребность идти, и т.д. На пересечениях с транзитным сервисом, Вы аннотируете их маркировками остановки - маркировки, разрешающие Вам поиску сервисное расписание для остановки.

Затем у Вас есть выбор сделать. Вам нужен самый лучший маршрут или просто маршрут? Вы отображаете маршруты в режиме реального времени, или решения могут вычисляться и кэшироваться?

при необходимости в "оперативном" вычислении Вы, вероятно, захотите пойти с жадным своего рода алгоритмом, я думаю А*, алгоритм , вероятно, соответствовал бы этой проблемной области справедливо приятно.

при необходимости в оптимальных решениях необходимо посмотреть динамическое программирование решения графика... оптимальные решения, вероятно, возьмут намного дольше для вычисления, но только необходимо найти их однажды, затем они могут кэшироваться. Возможно, Ваш* алгоритм мог использовать предварительно вычисленные оптимальные пути для информирования его решений о "подобных" маршрутах.

21
задан David Nehme 3 December 2009 в 16:05
поделиться

5 ответов

Вы можете делать все, что хотите, но вам нужно отложить определение вложенных классов.

class Animal
{
   class Bear;
   class Giraffe;
};

class Animal::Bear : public Animal {};

class Animal::Giraffe : public Animal {};
45
ответ дан 29 November 2019 в 06:32
поделиться

Тип класса считается неполным до тех пор, пока не будет достигнут конец его определения. Вы не можете наследовать от неполного класса, поэтому вы не можете наследовать от включающего класса.

РЕДАКТИРОВАТЬ: Исправление
Как меня поправил Ричард Вольф: Возможно наследование от включающего класса, если вы задерживаете определение вложенных классов. Подробнее см. Его ответ.

15
ответ дан 29 November 2019 в 06:32
поделиться

Я не понимаю, чего вы здесь пытаетесь достичь, но вы можете получить это через пространства имен.

namespace creatures
{

class Animal
{
};

class Bear : public Animal
{
};

class Giraffe : public Animal
{
};


}

Это объявляет Медведя и Жирафа типами животных, но помещает все это в пространстве имен, если вы ищете, чтобы базовый класс не загрязнял глобальное пространство имен.

2
ответ дан 29 November 2019 в 06:32
поделиться

На самом деле не отвечает на вопрос, но я думаю, что вы злоупотребляете вложенным классом. Возможно, вам стоит взглянуть на пространства имен (кстати, ответ: «это невозможно, потому что Животное - неполный тип »).

2
ответ дан 29 November 2019 в 06:32
поделиться

Всегда стоит рассмотреть ATL-метод «перевернутого наследования». Каждый раз, когда мне нужно это сделать, у меня болит голова, но эффективность получаемого объектного кода непревзойдена. Где-то я вырезал статью Джима Бевериджа, которая была лучшим объяснением, которое я когда-либо видел, но сегодня его трудно найти, я просто вижу ссылку на него.

«25 марта 2004 г. ... Отличная статья Джима Бевериджа: ATL и перевернутое наследование ..»

0
ответ дан 29 November 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: