从 lambda 推导 C++ 模板

标签 c++ templates

我有一个函数需要两个 std::function s 作为参数。第二个函数的参数与第一个函数的结果类型相同。

我写了一个这样的函数模板:

template<typename ResultType>
void examplFunction(std::function<ResultType()> func, std::function<void(ResultType)> func2) {
  auto x = func();
  func2(x);
}

我可以这样调用它:

void f() {
  examplFunction<int>([]() { return 1; },   //
                      [](int v) { std::cout << "result is " << v << std::endl; });
}

有没有办法摆脱 <int>examplFunction<int>并让编译器推断 ResultType 的类型?

最佳答案

你真的需要 std::function 吗?当您需要类型删除时,std::function 很有用。使用模板,您通常可以完全跳过它:

template<class F1, class F2>
void examplFunction(F1 func, F2 func2, decltype(func2(func()))* sfinae = nullptr) {
  auto x = func();
  func2(x);
}

sfinae 参数确保该函数只能被函数调用,使得 func2 可以被 func 的结果调用。

关于从 lambda 推导 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225371/

相关文章:

c++ - 二叉搜索树——删除功能不起作用

c++ - 使用 BST 的优先级队列——DeleteLargest 不起作用

c++ - 相同类型和相同变量的 union 在 GCC 中抛出错误,但在 Visual C++ 中不会

AngularJS错误: $compile:multidir Multiple Directive Resource Contention

c++ - 错误:未定义模板的隐式实例化 'llvm::yaml::MissingTrait

c++ - 优化析构函数的大小

c++ - 通过c/c++程序连接wifi

c++ - 类中的静态成员是如何分配的?

c++ - 在具有相同类型的模板中使用类型别名及其自身的模板类

c++ - std::function 隐式类型转换