如何在数学软件中抽象出整数类型

时间:2013-01-31 16:55:19

标签: c++ design-patterns template-meta-programming

我正在设计一种数学软件,其算法适用于通用整数类型,例如机器整数或GMP整数。对于性能,通常需要使用机器int,但如果有溢出,那么可能想要尝试切换到GMP;理想情况下在运行时。到目前为止,整个程序都是作为整数类型的模板编写的。随着图书馆的发展,痛苦也在增长:

  • 编译时间和内存消耗失控。
  • 编译时的错误消息不太有用。
  • 调试更痛苦。
  • 整个代码都在头文件中。

我可以想到以下解决方案。重构代码以依赖于通过编译时宏定义的固定类型。然后制作库的多个副本,每个整数类型一个,并在可执行文件中将它们链接在一起。缺点似乎是我需要一个库的接口。

简短的问题是:几乎整个程序依赖于某种类型的情况下的设计模式是什么?

2 个答案:

答案 0 :(得分:4)

GNU Multiple Precision Arithmetic Library已经

  

精心设计,尽可能快,适用于小型操作数和大型操作数。

换句话说,如果您使用GMP库,那么这将为您解决这些困难,并为您节省大量精力!

答案 1 :(得分:2)

在我自己的数学软件中,我默认使用GMP,但如果不可用,我想提供后备。我也没有享受巨大的gmpxx头文件,这会减慢我慢速机器上的编译速度。

所以我基本上在一个未定义的整数上写了一个包装类(使用pi std::aligned_storage)。可以在编译期间选择后端。

这摆脱了模板,为我提供了足够的灵活性。