我正在尝试创建一个元组,其中我将有一个带有生成器并返回double的函数。
我仍然难以实现它。
到目前为止,我正在尝试制作这样一条线:
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()是模板化的事实)但我不明白为什么它不能在auto上编译。
答案 0 :(得分: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);