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
相关产品推荐
相关产品推荐

