Более универсальный шаблон "посетитель"

Это потому, что <hr/> имеет границу (по крайней мере, в FireFox, поскольку <hr/> имеет стиль, зависящий от браузера).

Сначала удалите границу.

hr {
  border: none;
  border-bottom: 4px solid #469551;
  width: 30%;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 0px !important;
  height: 0;
}
body {
  background-color: black;
}
<br/>
<hr/>

9
задан Community 23 May 2017 в 02:19
поделиться

5 ответов

Для универсальной реализации Vistor я предложил бы Посетителя Loki, часть библиотеки Loki.

4
ответ дан 3 November 2019 в 07:15
поделиться

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

1
ответ дан 3 November 2019 в 07:15
поделиться

Если я понимаю это правильно...

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

0
ответ дан 3 November 2019 в 07:15
поделиться

Для пользы полноты:

конечно, абсолютно возможно записать собственную реализацию таблицы указателя мультиметода для Ваших объектов и вычислить адреса метода вручную во время выполнения. Существует статья Stroustrup по теме реализации мультиметодов (хотя в компиляторе).

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

0
ответ дан 3 November 2019 в 07:15
поделиться

Я испытываю затруднения при понимании требований. Но состояние Иллинойса - в моих собственных словах, поскольку это было - чем я понимаю ситуацию, чтобы быть:

  • У Вас есть абстрактный класс Параметра, который разделяется на подклассы в конечном счете к некоторым реальным классам (например: ParameterLimitedInt).

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

  • Ограничения - то, что Вы не хотите делать RTTID и не хотите писать код для обработки каждого возможного типа конкретного параметра.

  • Вы открыты для использования шаблона "посетитель".

Так как это - Ваши требования, вот то, как я обработал бы такую ситуацию:

Я реализовал бы шаблон "посетитель", где принятие () возвращает булево значение. Основной класс Параметра реализовал бы виртуальное, принимают (), функционируют и возвращают false.

Конкретные реализации класса Параметра затем содержали бы, принимают () функции, которые назовут визит посетителя (). Они возвратили бы true.

Класс посетителя использовал бы шаблонное посещение () функция, таким образом, Вы только переопределите для конкретного Параметра, вводит Вас, хотите поддерживать:

class Visitor
{
public:
  template< class T > void visit( const T& param ) const
  {
    assert( false && "this parameter type not specialised in the visitor" );
  }
  void visit( const ParameterLimitedInt& ) const; // specialised implementations...
}

Таким образом, если принимают (), возвращает false, Вы знаете, что конкретный тип для Параметра еще не реализовал шаблон "посетитель" (в случае, если существует дополнительная логика, которую Вы предпочли бы обрабатывать на индивидуальной основе). Если утверждение () в триггерах шаблона "посетитель", потому что не посещение типа Параметра, для которого Вы реализовали специализацию.

Одна оборотная сторона ко всему этому - то, что неподдерживаемые посещения только пойманы во времени выполнения.

0
ответ дан 3 November 2019 в 07:15
поделиться
Другие вопросы по тегам:

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