0

我有一个方法(在 A 类中)有很多不同的重载,我正在创建一个从 A 继承的 B 类,改变方法的行为以在执行它最初的操作之前执行某个操作。问题是必须对所有重载进行此更改,这可以使用模板来完成。

class A{
  public:
  void method(int);
  void method(double);
  void method(char);
};

class B : protected A{
  public:
  template<typename T>
  void method(T t){
    A::method(t);
  }
};

实际上这确实有效,但是使用模板意味着将方法的新代码放在类声明中(即在标题中),这有点乱,我觉得必须有一种方法来放置代码在一个单独的文件中。有一种方法可以做到这一点,那就是将重新定义的方法 B::method() 的代码移动到一个单独的文件中,并为每个重载手动实例化它。如果重载的数量变大,这会很乏味,而且感觉很不自然。所以,因此我的问题是:有没有办法直接告诉编译器为它有效的每种类型实例化模板方法 B::method() ?(即对于每个类型 A::method 都被重载)

4

1 回答 1

0

您可以使用using Base::member_id;来公开私有/受保护基础的成员:

class A{
  public:
  void method(int);
  void method(double);
  void method(char);
};

class B : protected A{
  public:
    using A::method;
};

int main() {
    B foo;

    foo.method(12);
}
于 2021-11-22T22:00:04.310 回答