Класс прокси C ++ - PullRequest
       6

Класс прокси C ++

7 голосов
/ 19 апреля 2011

Есть ли способ легко реализовать шаблон класса прокси в C ++? Не использовать AspectC ++ или другие тяжелые инструменты, просто встроенный макрос или шаблоны.

Объясняя, что я хочу:

class base_class
{
  public:
   virtual void method_one() { ... }
   virtual void method_two() { ... }
}

class class_proxy : base_class
{
   protected:
    void before_any_method_call() { do stuff };
    void after_any_method_call(std::exception* ex) { do stuff }
}

Вот сценарий. Класс, который я хочу прокси (base_class), выполняет удаленные вызовы, однако, когда сеть не работает, он выдаст исключение транспорта, полученное из std :: exception. В base_class имеется множество методов, и я хотел бы перехватить исключение транспорта, ответить пустым результатом и восстановить соединение перед следующим вызовом метода.

Ответы [ 3 ]

3 голосов
/ 19 апреля 2011

Если вы имеете в виду что-то, что автоматически генерируется с помощью чего-то вроде отражения, нет.Одним из распространенных способов реализации простых прокси-серверов является переопределение operator-> класса прокси.Это работает, если все, что вам нужно сделать в прокси, может быть сделано в это время.Этот метод используется в «Шаблонах проектирования» GoF в разделе «Реализация».

Редактирование (на основе дополнительной информации): если вы хотите что-то делать перед каждым вызовом, механизм перегрузки operator->() работает хорошоза это.Делать что-то после каждого вызова не так просто автоматизировать, но я мог бы представить, что что-то строится из специального возвращаемого объекта, который вызывает его, когда он разрушается.

1 голос
/ 20 апреля 2011

Это может помочь http://www.stroustrup.com/wrapper.pdf‎, однако я не думаю, что можно обрабатывать исключения таким образом.

0 голосов
/ 17 марта 2018

Я не уверен, что деривация - лучший дизайн для шаблона прокси. Возможно, ваше сообщение устарело, но у меня есть пример версии Proxy Pattern для защиты массива и доступа к элементам контейнеров STL здесь. Он использует шаблонное программирование и последние возможности C ++ 17: руководства по выводам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...