使用 auto 具有 boost::random 的分布函数

using auto for having a distribution function with boost::random

本文关键字:分布 函数 random 使用 具有 boost auto      更新时间:2023-10-16

我正在尝试创建一个元组,其中我将有一个函数,该函数需要一个生成器并返回一个双精度值。

我仍然难以实现它。

到目前为止,我正在尝试使这样的行起作用:

    auto g = boost::random::uniform_real_distribution<>().operator()<boost::random::mt19937>;

理想情况下,像这样使用它

#include <boost/random.hpp>
main()
{
    //I want to see all boost distribution as std::function<double(boost::random::mt19937)>
    auto g = boost::random::uniform_real_distribution<>().operator()<boost::random::mt19937>;
    boost::random::mt19937 f(0);
    double x = g(f);
}

我缺少一些东西(当然是 operator() 是模板化的事实),但我不明白为什么它不能在自动上编译。

表达式首先创建一个临时 ( boost::random::uniform_real_distribution<>() ),然后使用 . 表示法。编译器将其解释为尝试访问成员或调用该临时函数(在您的情况下operator ()函数)。但是,函数调用缺少参数和括号,这在语法上是非法的。这就是它无法编译的原因。

无论如何,如果我正确理解您要做什么,您基本上希望有一个封装另一个对象的operator ()函子。但是,我不明白你为什么需要一个。如果你首先有一个函子,比如boost::random::uniform_real_distribution<>,拥有另一个只包装其operator ()的函子是没有意义的。

你为什么不能这样做?

boost::random::uniform_real_distribution<> g;    
boost::random::mt19937 f(0);
double x = g(f);