2009-05-08 19 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

相关问题