(それはhereを生きる参照)明らかにparam_typeコンストラクタがランダムな分布に対して明示的になるのはなぜですか?</p> <pre><code>int main() { std::random_device engine; std::uniform_int_distribution<size_t> dis; std::cout << dis(engine, {0, 5}) << std::endl; } </code></pre> <p>をしかし、それはエラーメッセージで失敗します:
error: converting to 'const std::uniform_int_distribution<long unsigned int>::param_type' from initializer list would use explicit constructor 'std::uniform_int_distribution<_IntType>::param_type::param_type(_IntType, _IntType) [with _IntType = long unsigned int]'
std::cout << dis(engine, {0, 5}) << std::endl;
、それはparam_type
防止の明示的なコンストラクタがあります私たちはこれをやっていません。しかし、なぜそれを第一に明示的に指定するのですか?書き込みが必要な場合は冗長で愚かです
std::cout << dis(engine, decltype(dis)::param_type(0, 5)) << std::endl;
これについての説明はありますか?また、param_type
コンストラクタが標準で明示的であるとすれば、どのように簡潔でエレガントな方法で私が望むものを達成することができますか?実際には、dis
を呼び出すたびに範囲が異なることに注意してください。したがって、建設時間の範囲をdis
にすることは役に立ちません。
私の意見では、 'param_type'コンストラクタがデフォルト引数を持つことはあまり意味がありません。通常、 'param_type'を使用する必要があるのは、デフォルトが適用されないことを意味します。あなたが設計した 'construct_from()'はハッキリしています。はい、私はトリッキーなC++が好きです:)私は[Happy Hacking C++](https://github.com/Lingxi-Li/Happy_Hacking_CXX)プロジェクトに入れます。しかし、実際には、 'decltype(...):: param_type'に固執します。 – Lingxi