如何解决函数过载歧义

时间:2016-02-18 19:08:58

标签: c++ c++11

我有一对重载的函数,只需要一个参数。一个需要uint64_t。另一个需要int64_t。当我将uint32_t传递给函数时,它被正确标记为不明确。

如何在不诉诸模板的情况下解决这种歧义?我可以编写一个使用类型特征来解决它的浅包装器,但我宁愿不这样做。我希望签名类型解析为有符号重载,而无符号类型解析为无符号重载。

另外,我宁愿每个整数类型都没有重载。

1 个答案:

答案 0 :(得分:2)

您有几种选择:

  1. 要求来电者明确地投放到int64_tuint64_t
  2. 为每个整数类型提供重载
  3. 在签名时使用模板,SFINAE或tag-dispatch。
  4. (3)(在我看来)是最清晰的,(2)将是最详细的,(1)将需要你的用户最多的工作。