2016-06-12 52 views
-2

假设我有两个方法,一个简单的界面:定义大量接口实现

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

等等,一直谷仓,其中N可以是约50-60类。

很明显,实现将会有所不同,但仍然存在标题中出现大量样板定义的问题。我希望能够以某种方式避免在可能的情况下反复定义这些类。我在想,也许我可以使用宏或模板来自动生成代码,所以我只需要将列表bar3中的下一个类型键入一个函数,该函数将生成可以编译和链接的代码。然而,我正在阅读,我想不建议宏调用类的定义进行调试。直觉上模板感觉像是一种可能的解决方案,但我仍然需要在某处定义模板。

+5

用您的脚本语言编写一个小脚本,可能会出现格式正确的头文件? –

+0

_ @ Brian_你大概简化了你的例子。实际上应该是什么模板参数?一个类型或非类型参数? –

+0

boost预处理器库可能可以做到这一点。 – melpomene

回答

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

我还建议马克·福()和bar()与虚拟和/或无处不在。如果您还想简化实现,那么您可能首先将(从虚拟覆盖)委托给模板函数,但是一些其他信息将有助于进一步详细阐述。