我的类如下所示:
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
分别我不确定我是否正确地做。
最佳答案
每个 lambda 表达式都会产生一个具有唯一匿名类型的闭包。您可以使用 decltype
获取闭包的类型:
Langevin<decltype(h_force), std::default_random_engine> object(gen,h_force,qp);
在C++17中,这样写就足够了
Langevin object(gen,h_force,qp);
关于c++ - 类对象的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47391381/