2017-02-08 5 views
-2

I次のコード魔女が値をとり、0とその値の間のランダムな値を返します:C++ 14のテンプレートenable_ifの戻り値の型

template<typename T> 
typename std::enable_if<!std::is_integral<T>::value>::type 
RandomGenerator::random(T value) { 
    std::uniform_real_distribution<T> dist(0, value); 
    return dist(RandomGenerator::mt); 
} 

ここに私の問題は、戻り値の型がvoidと私であるということです

enable_ifは、このような別の関数を避けるために存在しますが、同様の問題がある積分型に対しては、std :: uniform_int_distributionを使用します。事前に

auto BaseAngle = 10.0f; 
//add a bit of randomness to the angle 
BaseAngle += RandomGenerator::random(45.0f); 

ありがとう:

は、どのように私は、次の例のコードを実行できる機能を書くことができます。

+1

ドキュメントを読む! http://en.cppreference.com/w/cpp/types/enable_if –

+0

あなたがC++ 14を使っているなら、 'typename std :: enable_if <...> :: typeの代わりに' std :: enable_if_t <...> 'を使うことができます' –

答えて

2

あなたはTではなくvoidことが定義された型を作るために

std::enable_if<!std::is_integral<T>::value, T> 

を使用することができます。

+0

ありがとう、それはトリックでした – MikeNeto