c++ - lambda 模板的匹配函数

标签 c++ templates c++11 lambda

我想调用一个接收两个模板的方法,如下代码:

template<class T>
class Test {
  T t;

public:
  Test(T v):t(v){}

  template<class FUNC, size_t N>
  T Func(FUNC&& fn) {
    T v = 0;
    for (size_t i = 0; i < N; i++)
      v += fn(i);

    return v;
  }
};

int main(int argc, char **argv) {
  Test<int> t(2);
  auto l = [](size_t i) {return 2*i;};

  int v = t.Func<decltype(l), 3>(l);

  return 0;
}

但是我得到了这个错误:

no matching function for call to ‘Test<int>::Func(main(int, char**)::<lambda(size_t)>&)’
   int v = t.Func<decltype(l), 3>(l);

如何处理这样的方法?

最佳答案

我建议您更改模板参数的顺序,让编译器自动推断出 FUNC 类型。

喜欢

template<size_t N, class FUNC>
T Func(FUNC fn) { ... }

并称它为

int v = t.Func<3>(l);

关于c++ - lambda 模板的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38514935/

相关文章:

c++ - 使用异常将用户输入存储为 double 或字符串

c++ - 欧拉计划 #16 : Answer 2 digits off

c++ - 在程序关闭期间终止 Qt 工作线程

Django 多模板继承

c++ - 3 * 1000000000 作为int溢出,但是变量是long long。为什么?

c# - 如何测试依赖于显示模板的代码?

c++ - 编写类型特征以检测 Eigen 中的矩阵表达式

c++ - 放置类构造函数

c++ - 返回右值的 shared_ptr 成员

concurrency - 实验弱有序并发的工具