Ratio<,> is constant, but what if I want to accept different ratios as an argument?

  • A+

Perhaps an oxymoronic question: ratio<,> is, by definition, a compile-time constant.

However, I would like to construct durations with different ratios that can be specified by the caller of my method. I'm guessing I should be using something other than ratio and/or duration, then, but what?

I want to have, say, a class member that can be set at runtime, and I would like it to be of type ratio<,>. At some point in the code, where this member gets set/assigned, it would be assigned a constant ratio, but in my class, I don't want to specify what that ratio should be.


You said that you need a std::ratio which "can be specified by the caller". There are three different options:

  • The caller wants to set std::ratio template parameters during compile time. This is trivial, simply set the parameters, e.g. using quarter = std::ratio<1, 4>.
  • The caller wants to set std::ratio template parameters during runtime. This is not possible by definition, std::ratio is a compile-time constant. You will have to implement your own class for computing ratios during runtime or use some kind of library (I don't know of any, suggestions welcome!).
  • If you merely want to scale your std::duration (which is what you seem to use your std::ratio for), just multiply it with a number.


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: