I am going to write a template for generating a random data vector. The problem in
std::uniform_int_distributionaccepts only the integer type std::uniform_real_distributionfor the float type. I want to combine both. Here is my code.
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>
#include <functional>
template<typename T>
std::vector<T> generate_vector(size_t N, T lower = T(0), T higher = T(99)) {
if constexpr (std::is_integral<T>) {
std::uniform_int_distribution<T> distribution(lower, higher);
}
else if constexpr (std::is_floating_point<T>) {
std::uniform_real_distribution<T> distribution(lower, higher);
}
std::mt19937 engine;
auto generator = std::bind(distribution, engine);
std::vector<T> vec(N);
std::generate(vec.begin(), vec.end(), generator);
return vec;
I am confused how to implement instructions in an if condition. Integer type should include: short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned long long. Float type includes float, double, or long double.
Any suggestion of help?
source
share