std :: ratio <>背后的设计原则

Mor*_*enn 28 c++ metaprogramming rational-numbers c++11

我正在研究std::ratio<>C++ 11标准中的类,它允许编译时合理算术.

我发现模板设计和用类实现的操作过于复杂,并且没有找到任何理由为什么他们不能通过实现一个非常简单的理性类并constexpr为操作符定义函数来使用更直接和直观的方法.结果将是一个更容易使用的类,并且编译时优势将保持不变.

有没有人知道当前std::ratio<>设计的优点与使用的简单类实现相比constexpr?实际上,我无法找到当前实现的任何优势.

How*_*ant 43

当提出N2661时,提案作者都没有访问实现的编译器constexpr.我们都不愿意提出一些我们无法建立和测试的东西.因此,是否可以进行更好的设计constexpr甚至不是设计考虑的一部分.该设计仅基于当时作者可用的工具.

  • @ jon34yp:有趣的是,问题者提出了两个问题:(1)`std :: ratio`背后的设计原则是什么,我认为霍华德是一个权威.(2)当前设计有哪些优点,可能有各种各样的答案,霍华德没有意识到,从未考虑过:-) (5认同)

小智 15

constexpr解决方案解决了完全不同的问题.std::ratio创建时用作使用不同单位的变量之间的桥梁,而不是作为数学工具.在这些情况下,您绝对希望比率是该类型的一部分.constexpr解决方案不适用于那里.例如,如果std::duration没有运行时空间和运行时成本,将无法实现,因为每个持续时间对象都需要在对象内携带其分母/分母信息.