0

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

我仍然很难实现它。

到目前为止,我正在尝试使这样的线路有效:

    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() 是模板化的事实),但我不明白为什么它不能在自动上编译。

4

1 回答 1

0

您的表达式首先创建一个临时 ( 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);
于 2013-01-31T17:54:18.513 回答