我试图将几种不同类型的c ++发行版存储到一个容器中,我想我可以使用std :: function来达到这个目的。我这样做的尝试如下:
void print_rand(){
// Make the random number generator
std::random_device rd{};
std::mt19937 engine(rd());
// Store the distribution in a std::function
auto n1 = std::make_shared<std::normal_distribution<double>>(0,1);
std::function<double (std::mt19937)> fn = std::bind(&std::normal_distribution<double>::operator(), n1, std::placeholders::_1);
// Call the function to get a normally distributed number
std::cerr << fn(engine) << std::endl;
}
但是我收到以下错误:
error: no matching function for call to ‘bind(<unresolved overloaded function type>, std::shared_ptr<std::normal_distribution<double> >&, const std::_Placeholder<1>&)’
std::function<double (std::mt19937)> fn = std::bind(&std::normal_distribution<double>::operator(), n1, std::placeholders::_1);
当我尝试模板专门化operator()时,调用如:
std::function<double (std::mt19937)> fn = std::bind(&std::normal_distribution<double>::operator()<std::mt19937>, n1, std::placeholders::_1);
我得到了同样的错误。
任何提示都会非常感激!
答案 0 :(得分:3)
以下是将normal_distribution
放入std::function
:
std::normal_distribution<double> nd(0, 1);
std::function<double(std::mt19937&)> fn = nd;
否shared_ptr
,没有bind
,没有lambda,没有复制随机数引擎(请注意&
)。