定义大量的接口实现

时间:2016-06-12 20:09:52

标签: c++ templates macros polymorphism

假设我有一个简单的界面,有两种方法:

class iface {
public:
  virtual void foo() = 0;
  virtual void bar() = 0;
};

现在我想定义该接口的大量实现,但类声明的唯一区别是名称。因此,这意味着没有额外的方法,变量或其他protected表达式。

例如:

class bar1 : public iface {
public:
  void foo();
  void bar();
};

class bar2 : public iface {
public:
  void foo();
  void bar();
};

等等,直到barN,其中N可以是大约50-60个等级。

显然,这些实现都会有所不同,但仍然存在标题中大量样板定义的问题。如果可能的话,我希望能够以某种方式避免一遍又一遍地定义这些类。我想也许我可以使用宏或模板来自动生成代码,这样我就可以将列表bar3中的下一个类输入到一个函数中,该函数将生成可以编译和链接的代码。但是,我正在阅读,我想不建议将宏类定义用于调试目的。模板直观地感觉像是一种可能的解决方案,但我仍然需要在某处定义模板。

1 个答案:

答案 0 :(得分:1)

如果您的问题真的很简单(即没有过度简化),那么您可能只会执行以下操作:

template<int i,
   typename std::enable_if_t< (i >= 0 && i < 50) > // this line is very much optional
>
class bar : public iface {
public:
  void foo();
  void bar();
};

我还建议在任何地方用虚拟和/或覆盖来标记foo()和bar()。如果你想简化实现,那么你可以先(从虚拟覆盖)委托给一个模板函数,但是有一些额外的信息可以用来进一步详细说明。