类对象的模板参数

时间:2017-11-20 11:51:58

标签: c++ class templates

我的课程如下:

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,我不确定我是否正确地做了。

1 个答案:

答案 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);

...感谢class template argument deduction