2009-05-08 49 views
0

假設我正在編寫一個函數模板GCD,它同時使用了operator/operator%。例如,對於某些類型,可以有效地計算複數或多項式(即,在劃分多項式時可以得到餘數「免費」)。所以我的一些類模板實現了divmod,它返回一對商和餘數。如何確定C++模板是否指定了方法

但是,某些類和特別內置的類型(如int)沒有divmod(或等效)實現。如果我正要寫一個使用divmodGCD,我會歧視其他類型(反之亦然)。我一直沒有想出一個模板專門化,它不需要重複GCD的大部分代碼。

我在這裏有什麼選擇?

回答

3

我會去的類型特徵和基於它的模板專業化。您可以使用元編程來確定類型是否具有divmod,並基於該類型提供一般算法的特定部分。也就是說,將算法的公共部分提取到一個通用的代碼片段中,該代碼片段根據typetraits調用不同部分的專用函數。

看看boost::type_traits library以瞭解類型特徵實現的方法,以及policy based design瞭解如何通過(策略)模板在通用代碼庫中注入不同行爲的想法。

+0

謝謝,我想你的答案和http://www.ddj.com/cpp/184404270#l4會讓我走! – user103892 2009-05-09 00:03:51

+0

好的,實際上http://www.kuro5hin.org/?op=displaystory&sid=2001/3/1/72020/17594做到了這一招 – user103892 2009-05-09 01:13:11

相關問題