2016-06-12 51 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()與虛擬和/或無處不在。如果您還想簡化實現,那麼您可能首先將(從虛擬覆蓋)委託給模板函數,但是一些其他信息將有助於進一步詳細闡述。