You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++17中如何调用带模板参数的仿函数?

解决C++17中调用模板函数对象时指定模板参数的编译错误

你的代码编译报错的核心原因是:编译器无法识别f<int>()里的<是模板参数列表的起始符号,反而将其解析成了小于运算符,进而触发语法错误。这是因为f是依赖模板参数FuncT的名称,编译器无法自动推断它是一个模板函数。

可行解决方案

修改call_function中的调用代码,使用template关键字明确告知编译器f的operator()是一个模板:

template<class FuncT>
void call_function(FuncT&& f)
{
    f.template operator()<int>(); // 用template关键字提示后续是模板参数列表
}

template<typename U>
void foo()
{
    U u = 42;
    // ...
}

int main()
{
    call_function(foo);
    return 0;
}

补充实现方式

如果不想使用operator()的写法,也可以通过显式实例化模板函数指针的方式调用:

template<class FuncT>
void call_function(FuncT&& f)
{
    // 显式实例化foo<int>并调用
    (&foo<int>)();
}

不过这种方式灵活性较差,仅适用于已知目标模板函数的场景,更推荐第一种通用解法。

内容的提问来源于stack exchange,提问作者T.L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:06:04