2012-02-10 62 views
0

我正在使用C库中的一个函数,该函数将一个数字作为参数。目前这意味着我有两个版本,一个用于double,另一个用于int应该为所有整数类型提供函数变体吗?

我应该为数字类型提供哪些版本的函数?

在标准库中看到这一点很常见,但它们不够一致以至于不能使用指导,例如, atof,atolatoi是一组,并且strtod,strtol,strtoul是不同组,abs,labs是第三组。这是三个不同的集合,不同的命名方案都在同一个头文件中。

编辑:

这不是一个单一的使用,我不知道需要什么样的变异体。

理想情况下,它会支持每一个标准变体,那么足够写三个函数的风格,并让用户在需要时提升类型?

+0

除非你有需要,浮点/整数对之一应该足够吗? – Anycorn 2012-02-10 16:52:00

回答

3

您是否需要更多功能变体?

我怀疑,鉴于这个问题需要问,你只需要一个double和一个int,你的两个功能。例如,如果您真的需要支持double complex,请构建专门的函数来处理该问题。

+0

这是一个通用库,将被打包并保存为几个不同项目的二进制文件。目前我不知道所有项目的要求,但我不想在几年内重写它,因为我忘记了我正在使用的各种方法和算法。阅读我对这些问题的编辑以进行澄清。 – Matt 2012-02-10 17:04:44

+0

+1为YAGNI ... – 2012-02-10 17:09:42

+0

@R ..,是的,只要您没有改进功能。或者你可以在第一时间做对,并且永远不要再看代码。 – Matt 2012-02-10 17:15:14

1

要回答这个问题,我认为我们需要更多地了解问题所在的功能。作为一般规则,我会提供至多一个浮点和一个整数版本,除非它确实对性能至关重要,以便从小型工作中获益。尽管如此,int是一个非常糟糕的选择。我会使用long,long long,intmax_tuintmax_t,具体取决于您是否要支持C89,关于在项目中使用类型的惯例以及签名要求。或者,您可以创建自己的类型mylib_intarg,让您更改使用的底层类型,但为了理智不要鼓励您的图书馆的用户使用这些丑陋类型声明变量。取而代之的是让它们成为函数的参数类型,以便调用者使用任何变量类型都是自然的。

1

实现它的C++函数模板,并添加一个C包装,这样,当你需要支持说long longlong double你只需要添加另一个C包装,你的C++算法中模板保持不变,你不需要记住的细节。

相关问题