私はC#でのようなタイプのクエリを達成するために、このコードを使用しています: 最短のコードでconstexprを実行するにはどうすればバックポートできますか?
template<class T>
constexpr bool IsSixtyFourBit() {
return is_same<T, int64_t>() || is_same<T, uint64_t>();
}
template<class T>
constexpr bool IsDouble() {
return is_same<T, double>() || is_same<T, double_t>();
}
template<class T>
constexpr bool IsFloat() {
return is_same<T, float>() || is_same<T, float_t>();
}
template<class T>
constexpr bool IsReal() {
return IsDouble<T>() || IsFloat<T>();
}
template <class T>
constexpr T MakePseudoNumberGenerator(T min, T max) {
if constexpr (IsSixtyFourBit<T>()) {
mt19937_64 rng(random_device{}()); // random-number engine used (Mersenne-Twister in this case)
uniform_int_distribution<T> uni(min, max); // guaranteed unbiased
return uni(rng);
} else if constexpr (IsReal<T>()) {
mt19937_64 rng(random_device{}()); // random-number engine used (Mersenne-Twister in this case)
uniform_real_distribution<T> uni(min, max); // guaranteed unbiased
return uni(rng);
} else {
mt19937 rng(random_device{}()); // random-number engine used (Mersenne-Twister in this case)
uniform_int_distribution<T> uni(min, max); // guaranteed unbiased
return uni(rng);
}
}
しかし、私は少なくともコードを使用してC++ 17の下にC++環境のためにそれをリライトする方法を見つけ出すことはできません...部分的な特殊ここでは動作しますが、それはその実用的な...
完全なコードではないはずです。私の理解でhttps://godbolt.org/g/QBs92V
https://medium.com/@LoopPerfect/c-17-vs-c-14-if-constexpr-b518982bb1e2 私はまだ何を解読していますconstexprがフードの下でやっている場合... –
あなたは* C++ 14 *でそれを書き直したいですか? –
これをC++ 14で書き直すだけでなく、最短コードも書き直すことができます。 –