C++ 重载函数作为模板参数

标签 c++ templates overloading

我的代码的简化版本在这里

int foo(int x)
{
  return x;
}

int foo(int x, int y)
{
  return x+y;
}

template<typename unary_func>
int bar(int k, unary_func f)
{
  return f(k);
}

int main()
{
  bar(3, foo);
  return 0;
}

有没有办法告诉编译器我想要传递的参数是第一个 `foo'?

最佳答案

你可以给出一个显式的模板参数:

bar<int(int)>(3, foo);

或将模棱两可的函数名称转换为可以从中推断出模板参数的类型:

bar(3, static_cast<int(*)(int)>(foo));

或将其包装在另一个函数(或函数对象)中以消除歧义

bar(3, [](int x){return foo(x);});

关于C++ 重载函数作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871381/

相关文章:

c++ - 为什么当我从 'mother' 类继承时,访问说明符设置为 PRIVATE,我不能在 'mother' 类中创建 'granddaughter' 类对象?

templates - Go模板无法在现场调用方法

C++ 使用 lambda 函数作为模板函数特化

java - Java 中的部分重写(或重载时的动态重写)

C++:从派生实例调用基类中的纯虚方法重载

c++ - 我怎样才能堵住这个 C++ 内存泄漏?

c++ - 调用函数时实际发生的情况

c++ - 三元运算符和 if constexpr

Python 和 Jinja2 - 导入另一个环境的模板

javascript - Google 图表 - 如何更改整个表格的 css 属性