Как использовать коэффициент вместо числа?

Так что я знаю, что я не могу использовать 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?

0

Решение

Там нет типа 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);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]