Так что я знаю, что я не могу использовать float
в качестве параметра шаблона:
template<float T>
float foo(const float param) { return param + T; }
Я слышал это ratio
может быть использован в качестве альтернативы. Я хотел бы сделать что-то вроде этого:
template<ratio T>
float foo(const float param) { return param * T::num / static_cast<float>(T::den); }
к несчастью ratio
не полный тип, так что не работает вообще. И в конечном итоге я должен спросить, почему бы просто не сделать:
template<int Num, int Denom>
float foo(const float param) { return param * Num / static_cast<float>(Denom); }
Я предпочел бы использовать ratio
потому что это более ясно представляет то, что я пытаюсь сделать. Может ли кто-нибудь предоставить мне простой способ использования ratio
?
Там нет типа ratio
, std::ratio
это шаблон класса. Этот шаблон сам по себе имеет числитель и знаменатель в качестве параметров шаблона.
Если вы хотите использовать std::ratio
это можно сделать так:
template<class T>
float foo(const float param) {
return param * T::num / static_cast<float>(T::den);
}
auto x = foo<std::ratio<4,7>>(42);
Других решений пока нет …