我的课程如下:
template <typename Function, class RNG>
class Langevin{
public:
Langevin(RNG & gen_, Function & func_,vector & qp_)
: gen(gen_),force(func_),qp(qp_){}
...
private:
RNG & gen;
Function & func;
vector & qp;
};
现在我想实例化一个类的对象,我必须放弃哪些模板参数?当RNG是随机引擎类型而Function是lambda函数的类型时。
auto h_force=[](double q, const double k){return -k*q;};
std::default_random_engine gen(314);
我认为应该是这样的:
Langevin<auto, std::default_random_engine> object(gen,h_force,qp);
我不会解释我应该写的内容而不是auto
可能分别是std::function
,我不确定我是否正确地做了。
答案 0 :(得分:3)
每个lambda表达式都会生成一个具有唯一匿名类型的闭包。您可以使用decltype
:
Langevin<decltype(h_force), std::default_random_engine> object(gen,h_force,qp);
在C ++ 17中,编写它应该足够了:
Langevin object(gen,h_force,qp);