c++ - 类对象的模板参数

标签 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 分别我不确定我是否正确地做。

最佳答案

每个 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 .

关于c++ - 类对象的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47391381/

相关文章:

c++ - 关于映射和迭代器的理论说明

c++ - 将文件转换为二进制 c++ studio 2012 的问题

c++ - 在 C++ 中定义具有必需构造函数参数的类成员

c++ - 循环中的模板元编程?

c++ - 来自用作模板参数的指针的类类型

c++ - 链表数组

C++:检查 vector<Class> 是否是 vector<Class> 的子集

python - 二进制搜索和外部函数 'return'错误

Javascript setInterval 不适用于此。对象

c++ - 如何确定模板中函数的返回类型