如何确定C ++模板是否具有指定的方法

时间:2009-05-08 23:45:09

标签: c++ templates

假设我正在编写一个使用GCDoperator/的函数模板operator%。例如,对于某些类型,复数或多项式都可以有效地计算(即,当分割多项式时,你得到“免费”的余数)。因此,我的一些类模板已实现divmod,它返回一对商和余数。

然而,某些类(尤其是内置类型,例如int)没有实现divmod(或等效)。如果我要编写一个使用GCD的{​​{1}},我会区别于其他类型(反之亦然)。我无法想出一个模板专业化,它不需要重复divmod的大部分代码。

我有什么选择?

1 个答案:

答案 0 :(得分:3)

我会根据它来寻找类型特征和模板特化。您可以使用元编程来确定类型是否具有divmod,并基于该类型提供通用算法的特定部分。也就是说,将算法的公共部分提取为一个通用的代码段,根据类型特征调用不同部分的专用函数。

查看boost::type_traits library以了解类型特征实现的方法,并policy based design了解如何通过(策略)模板在公共代码库中注入不同的行为。