2017-02-08 6 views
-2

У меня есть следующий код ведьма принимает значение и возвращает случайное значение в диапазоне от 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); 
} 

моя проблема в том, что тип возвращаемого значения является недействительным и я хотел, чтобы это было T.

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, вы можете использовать 'std :: enable_if_t <...>' вместо 'typename std :: enable_if <...> :: type ' –

ответ

2

Вы можете использовать

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

сделать тип, определенный Ве T, а не void.

+0

Спасибо, что сделал трюк – MikeNeto

Смежные вопросы