Могу ли я использовать шаблоны / макросы / оба для переноса каждой функции класса C ++? - PullRequest
2 голосов
/ 04 октября 2011

Предположим, у меня было это.

class A {
  public:
    int f1();
    int f2();
}

Есть ли способ использовать шаблоны / макросы / оба для создания класса, который ведет себя следующим образом?

class GeneratedClass {
  public:
    GeneratedClass(InjectedFunction injected_function) { /* store it */ }
    int f1() {
      injected_function();
      /* forward call to "inner class" and return its value */
    }
    int f2() {
      injected_function()
      /* forward call to "inner class" and return its value */
    }
}

По сути, я хочу иметь возможность генерировать класс, который поддерживает все функции данного класса, но делает что-то, прежде чем он вслепую перенаправляет вызов.

Этот класс будет создан с чем-то вроде.

SomeClassTemplate<A> infected_a(injected_function);

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

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

1 голос
/ 04 октября 2011

Звучит так, как будто вы хотите аспектно-ориентированный C ++. Эта ссылка обсуждает реализацию аспектно-ориентированного C ++ на чистом C ++, а также с расширением языка.

См. Также здесь для реализации.

Аспектно-ориентированное программирование - это разделение задач в проекте. Точки вставки указываются там, где вставлен код. Похоже, что вы хотите.

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