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

C++ 使用auto具有boost::random的分布函数,c++,boost,random,functional-programming,C++,Boost,Random,Functional Programming,我正在尝试创建一个元组,其中我将有一个函数,它接受一个生成器并返回一个double 我仍然难以实施它 到目前为止,我正在努力使这样一条线路起作用: auto g = boost::random::uniform_real_distribution<>().operator()<boost::random::mt19937>; auto g=boost::random::uniform_real_distribution().operator(); 最好像这样使

我正在尝试创建一个元组,其中我将有一个函数,它接受一个生成器并返回一个double

我仍然难以实施它

到目前为止,我正在努力使这样一条线路起作用:

    auto g = boost::random::uniform_real_distribution<>().operator()<boost::random::mt19937>;
auto g=boost::random::uniform_real_distribution().operator();
最好像这样使用它

#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);
}
#包括
main()
{
//我希望看到所有的boost分布都是std::function
auto g=boost::random::uniform_real_distribution().运算符();
boost::random::mt19937 f(0);
双x=g(f);
}

我遗漏了一些东西(确实是操作符()被模板化了),但我不明白为什么它不能在自动上编译。

您的表达式首先创建一个临时(
boost::random::uniform\u real\u distribution()
),然后使用
符号。编译器将其解释为试图访问成员或对该临时对象调用函数(在您的示例中,函数是
operator()
)。但是,函数调用缺少参数和括号,这在语法上是非法的。这就是它无法编译的原因

无论如何,如果我正确理解了您要做的事情,您基本上希望有一个封装另一个对象的
操作符()
的函子。然而,我不明白你为什么需要一个。如果一开始就有一个函子,比如
boost::random::uniform\u real\u distribution
,那么让另一个函子只包装它的
操作符()
是毫无意义的

你为什么不能这么做

boost::random::uniform_real_distribution<> g;    
boost::random::mt19937 f(0);
double x = g(f);
boost::random::均匀实分布g;
boost::random::mt19937 f(0);
双x=g(f);

您使用什么编译器和版本?如果
clang++
g++
您是否使用了
-std=c++11
(或
-std=c++0x
)标志?另外,如果您想使用c++11功能,为什么不在中使用PRGN功能?是的,我正在使用g++4.7链接c++11功能。我暂时不使用std:random来实现“人类可读性向后兼容”:p如果您想要一个函数实例,您不应该为此使用例如
boost::bind
(或
std::bind
)吗?