Каков надлежащий термин для Родителя?

Проблема с вашим решением состоит в том, что stopBits<1> и stopBits<2> - это разные типы, что затрудняет выбор во время выполнения, какой из них вы хотите использовать.

Вы можете сделать то же самое с не шаблонным классом с закрытым конструктором и шаблоном друга или статической функции make, который возвращает объект класса. Примерно так (предупреждение, непроверенный код):

class baudRate { 
   private:
     baudRate(int bps) : bps(bps) {}   
   public:
     template <int bps_> static constexpr baudRate make() {
       static_assert(whatever);
       return baudRate(bps_);
     }
   const int bps;
};

auto r = slow ? baudRate::make<9600>() : baudRate::make<115200>();

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

5
задан Binarian 30 May 2014 в 17:40
поделиться

6 ответов

Чтобы последовать к ответу состава - обычный шаблон должен был бы иметь родителя или создать или быть данным объекты, которые он содержит на и затем установил сам как некоторый делегат к каждому (если они должны сослаться на родителя) - отмечают, что ссылки делегата в отличие от большинства других вещей почти никогда не сохраняются, обычно присваиваются.

таким образом в Вашем примере, родитель сказал бы каждое колесо:

wheel.carDelegate = self;

затем колесо могло сказать родителя:

[carDelegate moveForward];

Хотя откровенно метафора в примере теряет меня немного там!

Другой подход должен обновить переменные в содержавшем obejcts, который родитель опросил бы так или иначе (этот подход, например, может работать, хорошо делая представления, которые получают продвинутое использование контроллера навигации и затем возвращаются, где основное представление должно сделать что-то на основе изменений, внесенных в представлениях sub).

4
ответ дан 18 December 2019 в 09:53
поделиться

Интересный... Я не знал, что Actionscript использовал слово "родитель" таким образом.

Существует два отдельных понятия на работе здесь: наследование и состав. Термин parent используется в обоих случаях в Objective C и многих других объектно-ориентированных языках.

В Objective C класс, который наследовался от другого, называет тот "другой" класс своим предком. В то время как многие люди используют термин superclass, на самом деле Вы могли вполне законно использовать слово parent. Поскольку имена подразумевают, это - объектное "наследование".

Возразите, что "состав", с другой стороны, то, что Вы описали с примером автомобиля и колеса. Автомобиль состоит из нескольких других объектов, один или несколько из которых колесо. Я должен признать, я не часто слышал термин parent используемый в этом контексте для обращения к автомобилю. Обычно, Вы, вероятно, найдете, что большинство людей в мире Objective C распознало бы car маркировкой "контейнер". В случае структуры данных древовидного стиля как XML-документ, тем не менее, мы часто говорим о родительских узлах и дочерних узлах. Родитель содержит дочерние элементы, так использование слова "родитель" в отношениях состава также уместно в зависимости от типа отношений. Я не думаю, что Вы найдете многих программистов Objective-C, использующих "родительское" слово в сценариях состава за пределами древовидной структуры, все же.

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

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

6
ответ дан 18 December 2019 в 09:53
поделиться

Так как Вы говорите о прямом Objective C и не определенной реализации платформы (такой как Какао), существует много способов реализовать родительско-дочернее поведение. Самое легкое, конечно, должно только иметь Ваш объект родительского класса, имеют несколько переменных экземпляра, являющихся детьми. Дети все принимают методы как initWithParent: или initWithCar: в данном случае.

@interface Car : Object
{
    Wheel[4] wheels;
}

- (void) goFoward:(Wheel *) wheel;

@end

@interface Wheel : Object
{
    Car *parent;
    float tirePressure;
    // etc . . .
}

- initWithCar:(Car *) aCar;

@end

@implementation Car
- init
{
    self = [super init];
    if (!self) return nil;

    unsigned i;
    for (i = 0; i < 4; i++)
        wheels[i] = [[Wheel alloc] initWithCar:self];

    return self;
}

- (void) goForward:
@end

@implementation Wheel
- initWithCar: (Car *) aCar
{
    self = [super init];
    if (!self) return nil;

    parent = aCar;

    return self;
}
@end
3
ответ дан 18 December 2019 в 09:53
поделиться

не уверенный, почему они имеют супер и порождают средний то же самое

Типичный беспорядок :)

  • Супер получатель, не родитель его класса. Точно так же, как сам не класс получателя. Различие между сам и супер - то, где поиск метода начинает с.

  • Родитель является указателем от класса до его суперкласса, за которым следует поиск метода.

2
ответ дан 18 December 2019 в 09:53
поделиться

Наблюдение Значения ключа исследования или KVO. Автомобиль может наблюдать за изменениями в Колесе и самом обновлении.

1
ответ дан 18 December 2019 в 09:53
поделиться

Не распространено сделать это, по крайней мере, не явно. В Какао существует два средства, что я думаю, занимают место функции, о которой Вы говорите:

  1. Делегация. Вы даете колесу ссылку на другой объект, который реализует определенный набор методов. Это могло быть владельцем объекта, но это мог быть некоторый другой объект, это вставляется на месте (большой для тестирования). Вы видите это на всем протяжении платформ Какао.

  2. Уведомления. В наше время это обычно сделано посредством Наблюдения Значения ключа. С этим Объект (автомобиль в Вашем примере) регистрируется для получения уведомлений когда определенное свойство Объекта B (колесо) изменения.

1
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

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