我可以使用模板/宏/两者来包装c++类的每个函数吗?

Can I use templates/macros/both to wrap each function of a C++ class?

本文关键字:c++ 函数 包装 可以使 我可以      更新时间:2023-10-16

假设我有这个。

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);

不,模板不能自动为您生成代码。

听起来你想要面向方面的c++。这个链接讨论了用纯c++和语言扩展实现面向方面的c++。

参见这里的实现。

面向方面的编程是关于项目中关注点的分离。插入点指定在插入代码的位置。听起来正是你想要的。