【发布时间】:2018-01-11 04:36:24
【问题描述】:
我要编写一个模板来生成一个随机数据向量。问题是
std::uniform_int_distribution 只接受整数类型,std::uniform_real_distribution 接受浮点类型。我想将两者结合起来。这是我的代码。
#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)) {
// Specify the engine and distribution.
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; // Mersenne twister MT19937
auto generator = std::bind(distribution, engine);
std::vector<T> vec(N);
std::generate(vec.begin(), vec.end(), generator);
return vec;
我很困惑如何在 if 条件下实现语句。整数类型应包括:short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned long long。浮点类型包括float, double, or long double。
有什么帮助建议吗?
【问题讨论】:
-
if constexprandstd::is_integralandstd::is_floating_point -
谢谢Justin,我刚试过,发现它支持C++ 17。